允许Signal与第三方WebSockets服务器集成需要什么? 第二部分问题 我是否正确地实现了这个客户端? 如果我要实现自己的WebSockets服务器,我对允许信号机的传输协商过程识别WebSockets并能够将其用于通信的要求是什么?
请注意,我的技术限制目前涉及 视窗7, 框架4.5, Owin自托管解决方案信号服务器, Owin自助式解决方案.NET客户端, Web客户端Javascript 第1部分:尝试使用System.Net.WebSocket.ClientWebSocket客户端实现Katana示例 因此,我正在构建一个自托管信号器流程,我在fiddler流量中注意到,我的连接使用的是LongPolling,而我更喜欢使用WebSocket,因此我开始研究使WebSocket可用所需的内容 一些快速的研究得出了混杂的信息: 一些消息来源指出,WebSockets仅在Windows 8和IIS 8上可用,并且WebSockets实现是在操作系统级别集成的 一些消息来源指出,该限制仅适用于希望使用HTTP.sys的各方,并且自托管解决方案可以利用WebSocket: 因此,我开始实施Katana示例—我有一个信号服务器,我想通过WebSockets、一个.NET客户端和一个Web客户端将其公开到我的信号服务器中—当我尝试在.NET客户端中执行以下代码时,截取客户端代码中当前不相关的部分:允许Signal与第三方WebSockets服务器集成需要什么? 第二部分问题 我是否正确地实现了这个客户端? 如果我要实现自己的WebSockets服务器,我对允许信号机的传输协商过程识别WebSockets并能够将其用于通信的要求是什么?,websocket,signalr,owin,katana,websocket4net,Websocket,Signalr,Owin,Katana,Websocket4net,请注意,我的技术限制目前涉及 视窗7, 框架4.5, Owin自托管解决方案信号服务器, Owin自助式解决方案.NET客户端, Web客户端Javascript 第1部分:尝试使用System.Net.WebSocket.ClientWebSocket客户端实现Katana示例 因此,我正在构建一个自托管信号器流程,我在fiddler流量中注意到,我的连接使用的是LongPolling,而我更喜欢使用WebSocket,因此我开始研究使WebSocket可用所需的内容 一些快速的研究得出了混杂
static void Main(string[] args)
{
Console.WriteLine("╔════════════════════════════════════════════════════════════════════════════╗");
Console.WriteLine("╠»»»- Starting Service.Host- «««╣");
Console.WriteLine("║-- Connecting to Client Messaging Hub-- ");
Console.WriteLine("║.....Attempting to upgrade to WebSockets ");
//UseDefaultConnectionParameters();
Connect("ws://localhost:8080");
Console.WriteLine(String.Format("║-->Connection Established [{0}]", @"ws://localhost:8080"));
Console.WriteLine("╠»»» Service.Host now started «««╣");
Console.WriteLine("╚════════════════════════════════════════════════════════════════════════════╝");
Console.ReadLine();
}
private static async Task Connect(string uri)
{
ClientWebSocket websocket = null;
try
{
websocket = new ClientWebSocket();//<= Throws exception
await websocket.ConnectAsync(new Uri(uri), CancellationToken.None);
await Task.WhenAll(Receive(websocket), Send(websocket));
}
catch(Exception ex)
{
Console.WriteLine("Exception: {0}", ex);
}
finally
{
if (websocket != null)
websocket.Dispose();
Console.WriteLine();
lock(master)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("WebSocket closed.");
Console.ResetColor();
}
}
}
投掷
Exception: System.PlatformNotSupportedException: The WebSocket protocol is not s
upported on this platform.
at System.Net.WebSockets.ClientWebSocket..ctor().
我的CLR客户端库以.NET Framework 4.5为目标
这是否遇到了一个硬限制,即在没有Windows 8的情况下,您实际上无法从System.Net.WebSocket命名空间创建WebSocket客户端
第2部分:调查第三方WebSocket服务器/客户端的含义
假设第1部分中的代码是一条死胡同,我想我的下一个可行的选择是实现第三方Web套接字服务器,例如使用适当的客户端,例如,并公开套接字服务器,供Signal使用。我希望答案不会是什么。它只会起作用,但一旦我启动SuperWebSocket并扩展我的CLR客户端以实现SignalR.Client.WebSocket4Net,需要什么让SignalR communications协商升级请求并开始通过ws://
有人能在这两条道路上提供任何指导吗?如果我选择了错误的路线,我预计会浪费很多时间。第一部分
Windows 8和2012中发布的新版本http.sys负责将常规http请求转换为持久、二进制、双向TCP连接,即WebSocket。这就是在建立websocket连接时允许IIS切换协议的原因
为什么ClientWebSocket不能在Windows 7上工作?好吧,这一点都没有意义,但服务器和客户端之间可能存在一些共享功能,这就是为什么它在使用PlatformNotSupportedException的旧操作系统中被阻止的原因
第二部分
您可能需要实现自己的来创建自己的,并在中注册它。这纯粹是猜测,我从未尝试过这样做:只是,对你能找到的关于这方面的小文档或经验要小心
但是问题来了,如果您的客户端切换到另一个传输,它将失败!由于操作系统无法在同一端口侦听长轮询和WebSocket,因此对WebSocket组件的常规HTTP请求将不会产生任何影响。这就是http.sys在其新版本中的技巧,侦听http常规请求,如果需要,仍然可以在websocket上打开其中一个请求
我的0.02
为什么是信号员?这是一种不会很快被需要的多填料。WebSockets是一种标准的、受广泛支持的技术,很容易在旧浏览器中使用。信号员正在检查限制部分。我编写并维护了一个,您可能想尝试一下:它没有客户端。我建议您在选择一个库之前测试几个库的性能和可伸缩性
Exception: System.PlatformNotSupportedException: The WebSocket protocol is not s
upported on this platform.
at System.Net.WebSockets.ClientWebSocket..ctor().