我有以下代码来支持服务器端的websockets:
while (webSocket.State == WebSocketState.Open)
{
var buffer = new ArraySegment<byte>(new byte[4096*1024]);
WebSocketReceiveResult received;
try
{
received = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
}
catch (IOException ex)
{
Thread.Sleep(1000);
continue;
}
//process the message
}
在一台机器上(开发,IISExpress, Windows 10)它工作正常(等待ReceiveAsync直到消息到达),而它在staging环境(Windows Server 2012, IIS)上工作有些奇怪- ReceiveAsync不断抛出IOException
与消息Unexpected end of stream
。但是套接字仍然打开,我可以重试对ReceiveAsync
的调用,如果确实有消息,它成功并返回消息。任何想法,我怎么能找出为什么它抛出异常时,没有可用的消息,而不是只是等待一个?
编辑:当想到它时,我实际上不确定ReceiveAsync
是否收到消息(现在无法检查),但我确信浏览器和后端之间的通信工作,因此websocket绝对是打开的(我也通过检查异常后的状态属性来确认)。
似乎问题是,在IIS上,我使用的应用程序池与。net CLR版本设置为v4.0,而它应该是无托管代码。