Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号机客户赢得';在Azure Worker角色中使用OWIN自主机无法连接_C#_Azure_Signalr_Owin_Azure Worker Roles - Fatal编程技术网

C# 信号机客户赢得';在Azure Worker角色中使用OWIN自主机无法连接

C# 信号机客户赢得';在Azure Worker角色中使用OWIN自主机无法连接,c#,azure,signalr,owin,azure-worker-roles,C#,Azure,Signalr,Owin,Azure Worker Roles,我有一个Azure云服务,其工作角色在启动时启动OWIN web应用程序,该应用程序使用Signal 另外,我有一个控制台项目,它使用SignalR客户端库连接到这个工作者角色并侦听事件 当我使用Azure模拟器在本地运行客户端和服务时,一切都正常。 当我发布云服务并将控制台应用程序指向云服务并尝试连接时,我在信号器跟踪日志中得到以下信息: WS连接到:WS://myapp.cloudapp.net/signar/connect?clientProtocol=1.4&transport=webS

我有一个Azure云服务,其工作角色在启动时启动OWIN web应用程序,该应用程序使用Signal

另外,我有一个控制台项目,它使用SignalR客户端库连接到这个工作者角色并侦听事件

当我使用Azure模拟器在本地运行客户端和服务时,一切都正常。

当我发布云服务并将控制台应用程序指向云服务并尝试连接时,我在信号器跟踪日志中得到以下信息:

WS连接到:WS://myapp.cloudapp.net/signar/connect?clientProtocol=1.4&transport=webSockets&connectionData=[{“Name”:“MessageBusHub”}]&connectionToken=…

OnError(System.Net.WebSockets.WebSocketException(0x80004005):发生内部WebSocket错误。有关详细信息,请参阅内部异常(如果存在)。->System.Net.Sockets.SocketException(0x80004005):远程主机强制关闭了现有连接

然后,它继续使用服务器发送的事件和长轮询重试,每次都出现相同的错误

我正在云服务配置中使用以下端点:

<Endpoints>
  <InputEndpoint name="SignalREndpoint" protocol="http" port="80" localPort="80" />
</Endpoints>
在客户端项目中,我只是使用一个HubConnection来连接,使用以下URL进行本地测试,
http://localhost:80
,以及以下用于连接到云实例的URL,
http://myapp.cloudapp.net

我不确定实际的Azure实例和我的本地模拟器之间有什么不同,这导致它无法在云中工作


有趣的是,如果我使用浏览器连接到URL
http://myapp.cloudapp.net/signalr/hubs
,它工作并返回JS代理文件。

您是否尝试使用TCP而不是HTTP作为协议

我不是信号专家,但我知道这一点。当我们在Azure worker角色上托管服务器(XSockets.NET)时,我们将协议配置为TCP(而不是HTTP)。 但我不知道为什么它会在localhost上工作

另一个要考虑的是,工作人员角色是否支持WebSosits?Simulalr需要IIS8+来支持WebSoCo支持,而且我不知道您是否可以在一个工作者角色中访问它。Azure中没有选项可以在工作者角色上打开/关闭WebSooCKET(从我可以看到的)。因此,我的猜测是没有Microsoft WebSocket担任工作者角色。我可能错了


编辑:查看了我的一个实例,发现我可以更改操作系统,默认的操作系统是2012 Server。所以应该可以使用Microsoft websockets!

您尝试过使用TCP而不是HTTP作为协议吗

我不是信号专家,但我知道这一点。当我们在Azure worker角色上托管服务器(XSockets.NET)时,我们将协议配置为TCP(而不是HTTP)。 但我不知道为什么它会在localhost上工作

另一个要考虑的是,工作人员角色是否支持WebSosits?Simulalr需要IIS8+来支持WebSoCo支持,而且我不知道您是否可以在一个工作者角色中访问它。Azure中没有选项可以在工作者角色上打开/关闭WebSooCKET(从我可以看到的)。因此,我的猜测是没有Microsoft WebSocket担任工作者角色。我可能错了


编辑:查看了我的一个实例,发现我可以更改操作系统,默认的操作系统是2012 Server。因此Microsoft websockets应该可用!

Signal尝试退回到服务器发送的事件或长轮询,这只是一个基本的HTTP请求,因此无论是否支持web套接字,它都应该工作。在跟踪客户端时t这表明它在长时间轮询中得到的错误与web套接字连接完全相同。Signal尝试退回到服务器发送的事件或长时间轮询,这只是一个基本HTTP请求,因此无论是否支持web套接字,它都应该工作。跟踪客户端时,它表明它在长时间轮询中得到的错误完全相同与web套接字连接一样。
var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["SignalREndpoint"];
string webAppUrl = $"{endpoint.Protocol}://{endpoint.IPEndpoint}";
_webApp = WebApp.Start<Startup>(webAppUrl);
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.UseServerAuthentication();
        GlobalHost.DependencyResolver.UseServiceBus(CloudConfigurationManager.GetSetting("ServiceBusConnectionString"), "SignalRMessageBus");
        app.MapSignalR(new HubConfiguration()
        {
            EnableDetailedErrors = true,
        });
    }
}