OWIN 자체 호스트를 사용하여 새 SignalR을 종료하고 시작할 수 없습니다.

조지 월

이것은 1.5주의 리팩토링이 끝날 때 부딪 힐 벽이 아닙니다.

나는 그것을 곰의 최소값으로 낮추었 고 나는 절대적인 손실을 입었습니다.

owin selfhost (katana)를 사용하여 SignalR 웹 서버를 시작하고 연결합니다. 시스템을 종료 한 다음 시작하고 다시 연결을 시도합니다.

두 번째 를 통해 시간 연결을 시작하는 동안 나는 오류가 발생합니다 (그냥 처음에 잘 작동) :

public partial class App : Application
{

    void App_Startup(object sender, StartupEventArgs e)
    {
        using (var server = new TestWebServer()) {
            server.Start();
            using (var hubConnection = new HubConnection(TestWebServer.Host)) {
                var proxy = hubConnection.CreateHubProxy("testHub");
                hubConnection.Start().Wait();
                Debug.Assert(hubConnection.State == ConnectionState.Connected);
            }
        }

        // Makes it here fine

        using (var server = new TestWebServer()) {
            server.Start();
            using (var hubConnection = new HubConnection(TestWebServer.Host)) {
                var proxy = hubConnection.CreateHubProxy("testHub");
                hubConnection.Start().Wait(); //<-throws "Transport timed out trying to connect"
                Debug.Assert(hubConnection.State == ConnectionState.Connected);
            }
        }
    }
}

와 함께 TestWebServer:

public class TestWebServer : IDisposable {
    public const string Host = "http://localhost:8081/";
    public void Start() {
        if (null != server) return;
        this.server = WebApp.Start(Host, app => {
            var cfg = new HubConfiguration { };
            app.MapSignalR(cfg);
        });
    }
    IDisposable server;

    //Super-duper-for-real disposable https://lostechies.com/chrispatterson/2012/11/29/idisposable-done-right/
    bool _disposed;
    public void Dispose() {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    ~TestWebServer() {
        Dispose(false);
    }
    protected virtual void Dispose(bool disposing) {
        if (_disposed)
            return;
        if (disposing) {
            if (null == server) return;
            server.Dispose();
            server = null;
        }
        _disposed = true;
    }

}

TestHub

[HubName("testHub")]
public class TestHub : Hub {
    public void Ping() => Clients.All.pong();
}

이것은 SignalR 2.2.0을 사용하고 있으며 .Net 4.5 및 4.6.1에서 모두 시도했습니다.

이것은 내가 만드는 방법을 알고 있고 작동하는 것을 알 수있는 것처럼 단순한 SignalR 애플리케이션입니다! 한번. 그런 다음 똑같은 코드를 폐기하고 다시 시도하면 실패합니다.

무슨 일이야? 물건을 처리하기 위해해야 ​​할 다른 일이 있습니까?

네, Thread.Sleep두 사람 사이에 시도했습니다 .

다음은 문제를 보여주는 테스터 프로젝트입니다.

조지 월

이 기사 를 찾은 내 동료 Shamus에게 모든 공로를 인정했고 그게 성공할 때까지 내 데모 프로젝트를 해킹 할만큼 의심했습니다.

매번 새 인스턴스 를 제공하면HubConfigurationResolver 중지하고 다시 시작할 수 있습니다 . , 소스에서이 넌센스를 확인하십시오 .

즉, do

var cfg = new HubConfiguration { Resolver = new DefaultDependencyResolver() };

모든 것을 고치는 좋은 시간 동안.

SO 무엇을이 순간처럼 보인다 제대로 처리되지 않는 종속성 해결에 저장되어있는 그 무언가이다. (이 의심은 웹 서버 폐기 중에 발생하는 예외가 발생하고 디버그 출력에 기록된다는 사실로 인해 더욱 심해졌습니다.) 매번 수동으로 자체 리졸버를 생성하지 않으면 ... 축하합니다. 부적절하게 처리 된 객체를 포함하는 동일한 글로벌 리졸버를 잡는 것입니다.

그래서 대답은 예, 이것은 SignalR 버그이지만 예, 간단한 해결 방법이 있다는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android 스튜디오-인 텐트를 사용하여 새 활동을 시작할 수 없습니다.

분류에서Dev

새 셸을 시작하고 새 환경 변수를 전달하고 종료 할 때까지 작업하는 방법은 무엇입니까?

분류에서Dev

bash 스크립트에서 echo를 사용하여 새 줄을 사용할 수 없습니다.

분류에서Dev

||를 사용하여 루프를 종료 할 수 없습니다. 운영자

분류에서Dev

빈 개체 배열을 선언 할 때 생성자를 사용하여 새 개체를 만들 수 없습니다.

분류에서Dev

Tomcat을 사용하여 시작 페이지를 시작할 수 없습니다.

분류에서Dev

새 컨텍스트를 사용하여 Kubernetes에 연결할 수 없습니다.

분류에서Dev

Ubuntu 16.04 Skylake를 종료하고 다시 시작할 수 없음

분류에서Dev

작업 스케줄러를 사용하여 시작할 때 AutoHotkey가 ClickOnce 앱을 시작할 수 없습니다.

분류에서Dev

VBA를 사용하여 한 시트에서 다른 시트로 전체 행을 복사 할 수 없습니다.

분류에서Dev

사용자 지정 셀에서 UISwitch를 사용하여 새 컨트롤러로 이동할 수 없습니다.

분류에서Dev

kill -9를 사용하여 작업을 종료 할 수 없음

분류에서Dev

jquery를 사용하여 새 iframe을 만들 수 없습니다.

분류에서Dev

jquery를 사용하여 기타 값을 확인한 후 텍스트 상자를 표시 할 수 없습니다.

분류에서Dev

BAT 파일을 사용하여 내 사용자 계정으로 시작된 모든 프로세스를 어떻게 종료 할 수 있습니까?

분류에서Dev

Linux 시스템을 사용하여 입력 파일에 새 줄을 추가 할 수 없습니다.

분류에서Dev

android SIP : getonsip.com을 사용하여 com.android.server.sip.sipsessiongroup을 실행하기위한 새 트랜잭션을 시작할 수 없습니다.

분류에서Dev

ant를 사용하여 jar에서 main ()을 시작할 수 없습니다.

분류에서Dev

직렬 연결을 사용하여 GDBserver를 시작할 수 없습니다.

분류에서Dev

새 Firebase를 사용하여 '__NSDictionaryM'유형의 값을 맞춤 사용자 클래스로 캐스팅 할 수 없습니다.

분류에서Dev

nodemailer를 사용하여 Gmail을 사용하여 이메일을 보내려고하는데 "사용자에 대한 새 액세스 토큰을 만들 수 없습니다."라는 오류가 표시됩니다.

분류에서Dev

자바 스레드 : 새 스레드를 생성하고 이전 스레드를 종료 / 중단 할 수 없음

분류에서Dev

Eclipse에서 Appium을 사용하여 JUnit 테스트를 시작할 수 없습니다.

분류에서Dev

AWS Auto Scaling 그룹에 대한 새 인스턴스를 주기적으로 자동 종료하고 다시 생성 할 수 있습니까?

분류에서Dev

preg_replace를 사용하여 다른 기호를 대체하여 공백을 제거 할 수 없습니다.

분류에서Dev

사용자가 쓰기를 중지하고 루프에서 새 번호를 시작할 때 루프를 종료하려면 어떻게해야합니까?

분류에서Dev

MySQL을 시작하여 루트 암호를 재설정 할 수 없습니다.

분류에서Dev

부트 스트랩 UI를 사용하여 시작 / 종료 날짜 범위를 만들 수 없습니다.

분류에서Dev

사용자 지정 후크를 사용하여 구성 요소를 새로 고치거나 다시 렌더링 할 수 없습니다.

Related 관련 기사

  1. 1

    Android 스튜디오-인 텐트를 사용하여 새 활동을 시작할 수 없습니다.

  2. 2

    새 셸을 시작하고 새 환경 변수를 전달하고 종료 할 때까지 작업하는 방법은 무엇입니까?

  3. 3

    bash 스크립트에서 echo를 사용하여 새 줄을 사용할 수 없습니다.

  4. 4

    ||를 사용하여 루프를 종료 할 수 없습니다. 운영자

  5. 5

    빈 개체 배열을 선언 할 때 생성자를 사용하여 새 개체를 만들 수 없습니다.

  6. 6

    Tomcat을 사용하여 시작 페이지를 시작할 수 없습니다.

  7. 7

    새 컨텍스트를 사용하여 Kubernetes에 연결할 수 없습니다.

  8. 8

    Ubuntu 16.04 Skylake를 종료하고 다시 시작할 수 없음

  9. 9

    작업 스케줄러를 사용하여 시작할 때 AutoHotkey가 ClickOnce 앱을 시작할 수 없습니다.

  10. 10

    VBA를 사용하여 한 시트에서 다른 시트로 전체 행을 복사 할 수 없습니다.

  11. 11

    사용자 지정 셀에서 UISwitch를 사용하여 새 컨트롤러로 이동할 수 없습니다.

  12. 12

    kill -9를 사용하여 작업을 종료 할 수 없음

  13. 13

    jquery를 사용하여 새 iframe을 만들 수 없습니다.

  14. 14

    jquery를 사용하여 기타 값을 확인한 후 텍스트 상자를 표시 할 수 없습니다.

  15. 15

    BAT 파일을 사용하여 내 사용자 계정으로 시작된 모든 프로세스를 어떻게 종료 할 수 있습니까?

  16. 16

    Linux 시스템을 사용하여 입력 파일에 새 줄을 추가 할 수 없습니다.

  17. 17

    android SIP : getonsip.com을 사용하여 com.android.server.sip.sipsessiongroup을 실행하기위한 새 트랜잭션을 시작할 수 없습니다.

  18. 18

    ant를 사용하여 jar에서 main ()을 시작할 수 없습니다.

  19. 19

    직렬 연결을 사용하여 GDBserver를 시작할 수 없습니다.

  20. 20

    새 Firebase를 사용하여 '__NSDictionaryM'유형의 값을 맞춤 사용자 클래스로 캐스팅 할 수 없습니다.

  21. 21

    nodemailer를 사용하여 Gmail을 사용하여 이메일을 보내려고하는데 "사용자에 대한 새 액세스 토큰을 만들 수 없습니다."라는 오류가 표시됩니다.

  22. 22

    자바 스레드 : 새 스레드를 생성하고 이전 스레드를 종료 / 중단 할 수 없음

  23. 23

    Eclipse에서 Appium을 사용하여 JUnit 테스트를 시작할 수 없습니다.

  24. 24

    AWS Auto Scaling 그룹에 대한 새 인스턴스를 주기적으로 자동 종료하고 다시 생성 할 수 있습니까?

  25. 25

    preg_replace를 사용하여 다른 기호를 대체하여 공백을 제거 할 수 없습니다.

  26. 26

    사용자가 쓰기를 중지하고 루프에서 새 번호를 시작할 때 루프를 종료하려면 어떻게해야합니까?

  27. 27

    MySQL을 시작하여 루트 암호를 재설정 할 수 없습니다.

  28. 28

    부트 스트랩 UI를 사용하여 시작 / 종료 날짜 범위를 만들 수 없습니다.

  29. 29

    사용자 지정 후크를 사용하여 구성 요소를 새로 고치거나 다시 렌더링 할 수 없습니다.

뜨겁다태그

보관