【问题标题】:If stop iss default website still get response in SignalR client如果停止 iis 默认网站仍会在 SignalR 客户端中获得响应
【发布时间】:2019-11-09 04:05:30
【问题描述】:

我们使用的是 Windows Server 2016。我们有客户端/Web 应用程序来检查服务器是否正在运行(未停止),并相应地在 Web/客户端应用程序页面上显示按钮已连接。

我们的 signalR API 在 iis 服务器上托管为默认网站,如果我们停止它,仍然会从 signalR API 服务器获得响应。

注意:它仅在我们停止整个 iss 服务器或创建单独的 Web 应用程序而不是默认网站时才起作用。

<input type="text" id="msg" value=" " />
    <input type="button" id="send" value="send" />
    <div id="message">
    </div>
    <script src="Scripts/jquery-1.8.3.min.js"></script>
    <script src="Scripts/jquery.signalR-1.1.3.min.js"></script>    
    <script>

        var connection = $.hubConnection('http://websitename/WebApi/signalr');
        //connection.logging = true;

        var proxy = connection.createHubProxy('SignalRHub');
        console.log(connection);
        console.log(proxy);

        connection.stateChanged(function (change) {
            console.log(change);
            console.log($.signalR.connectionState);
            if (change.newState === $.signalR.connectionState.reconnecting) {
                console.log("liveFeed is reconnecting!");
            }
            else if (change.newState === $.signalR.connectionState.connected) {
                console.log("liveFeed is connected!");
                connection.start().done(function (data) {
                    console.log('Now connected ', data);
                    proxy.invoke('GetRealTime');
                }).fail(function (er) {
                    console.log(er);
                });
            }
            while (change.newState === $.signalR.connectionState.disconnected) {
                console.log("in while loop")
                connection.start().done(function (data) {
                    console.log('Now connected ', data);
                    proxy.invoke('GetRealTime');
                }).fail(function (er) {
                    console.log(er);
                });
            }
        });

        proxy.on('setRealTime', function (obj) {
            var text = $('#message').html();
            $('#message').html(JSON.stringify(obj));
        });

        connection.disconnected(function (data) {
            console.log(data);
            alert('Server has disconnected');
        });

        connection.start().done(function (data) {
            console.log('Now connected ', data);
            proxy.invoke('GetRealTime');
        }).fail(function (er) {
            console.log(er);
        });


    </script>

【问题讨论】:

  • 您能否发布更多关于您如何在 IIS 中托管 signalR 应用程序的详细信息?托管在 IIS 中的默认 web sie 上的 signalR 应用程序是否停止了默认网站?

标签: asp.net-mvc iis signalr


【解决方案1】:

当您停止网站时,您是否正在停止您的应用程序池?停止您的应用程序池(不是所有的 IIS,这意味着 W3SVC 服务仍在运行,其他站点可以运行,等等...)将关闭您的所有服务器端代码(SignalR 等...)。仅停止您的站点仍会使 SignalR 在应用程序池中运行。

如果您为所有站点使用默认应用程序池,请将它们分开。只停止您的 SignalR 网站和应用程序池。当您的客户端检测到连接状态发生变化时,您应该会看到差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多