C# 信号机客户赢得';在Azure Worker角色中使用OWIN自主机无法连接
我有一个Azure云服务,其工作角色在启动时启动OWIN web应用程序,该应用程序使用Signal 另外,我有一个控制台项目,它使用SignalR客户端库连接到这个工作者角色并侦听事件 当我使用Azure模拟器在本地运行客户端和服务时,一切都正常。 当我发布云服务并将控制台应用程序指向云服务并尝试连接时,我在信号器跟踪日志中得到以下信息: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
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,
});
}
}