[英]SignalR client won't connect using OWIN Self Host in Azure Worker Role
我有一个具有辅助角色的Azure云服务,该服务在启动时启动使用SignalR的OWIN Web应用程序。
另外,我有一个控制台项目,该项目使用SignalR客户端库连接到此辅助角色并侦听事件。
当我使用Azure模拟器在本地运行客户端和服务时,一切正常。
当我发布云服务并将控制台应用程序指向它并尝试连接时,在SignalR跟踪日志中得到以下信息:
WS Connecting to: ws://myapp.cloudapp.net/signalr/connect?clientProtocol=1.4&transport=webSockets&connectionData=[{"Name":"MessageBusHub"}]&connectionToken=...
OnError(System.Net.WebSockets.WebSocketException (0x80004005): An internal WebSocket error occurred. Please see the innerException, if present, for more details. ---> System.Net.Sockets.SocketException (0x80004005): An existing connection was forcibly closed by the remote host
然后,它将继续尝试使用服务器发送的事件再次进行尝试,并且每次都使用相同的错误进行长时间轮询。
我在云服务配置中使用以下端点:
<Endpoints>
<InputEndpoint name="SignalREndpoint" protocol="http" port="80" localPort="80" />
</Endpoints>
这是我创建OWIN Web应用程序的方式:
var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["SignalREndpoint"];
string webAppUrl = $"{endpoint.Protocol}://{endpoint.IPEndpoint}";
_webApp = WebApp.Start<Startup>(webAppUrl);
最后,这是我配置SignalR的方法:
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,
});
}
}
在客户端项目中,我简单地使用HubConnection使用本地测试以下URL连接, http://localhost:80
,以及用于连接到云实例下面的网址, http://myapp.cloudapp.net
我不确定实际的Azure实例与本地模拟器之间的区别是什么导致它在云中无法正常工作。
有趣的是,如果我使用浏览器连接到URL http://myapp.cloudapp.net/signalr/hubs
,它将起作用并返回JS代理文件。
您是否尝试过使用TCP代替HTTP作为协议?
我无论如何都不是SignalR专家,但是我知道这一点。 当我们将服务器(XSockets.NET)托管在Azure辅助角色上时,我们会将协议配置为TCP(而非HTTP)。 不知道为什么它可以在本地主机上工作。
要考虑的另一件事是工作角色是否支持websocket? SignalR需要IIS8 +来支持websocket,我不知道您是否可以通过辅助角色访问它。 Azure中没有选项可以打开/关闭辅助角色的Websocket(据我所见)。 因此,我的猜测是辅助角色中没有Microsoft WebSockets。 我可能在这里错了!
编辑:查看了我的一个实例,发现我可以更改操作系统,默认实例是2012 Server。 因此,Microsoft websockets应该可用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.