我正在尝试在IIS 8.5上使用WebSockets。我从一节课中开始介绍几个非常基本的C#课程:
using Microsoft.Web.WebSockets;
using System.Web;
public class ChatHttpHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.IsWebSocketRequest)
context.AcceptWebSocketRequest(new WebSocketChatHandler());
}
public bool IsReusable
{
get { return true; }
}
}
public class WebSocketChatHandler : WebSocketHandler
{
private static WebSocketCollection clients = new WebSocketCollection();
private string name;
public override void OnOpen()
{
this.name = this.WebSocketContext.QueryString["username"];
clients.Add(this);
clients.Broadcast(string.Format("{0} joined.", name));
}
public override void OnMessage(string message)
{
clients.Broadcast(string.Format("{0}: {1}", name, message));
}
public override void OnClose()
{
clients.Remove(this);
clients.Broadcast(string.Format("{0} left.", name));
}
}
和一个简单的HTML客户端。该项目构建正常,但是当我尝试连接到处理程序时,它返回错误500.问题是我无法看到确切的错误是什么,因为Chrome和FF都没有为ws://方案加载响应主体,所以我甚至无法在Developer Tools的Network选项卡中看到它(尽管IIS提供了正文,正如我从响应'Content-Length中看到的那样)。 有没有办法在这种情况下看到响应机构?或者IIS中的WebSockets缺少什么?
答案 0 :(得分:0)
您应该能够在Windows事件查看器中查看错误原因。
Fiddler将显示连接并已升级到Web套接字,因此您可以使用该工具至少显示连接是否有效。我不知道有一个工具可以显示升级后流过套接字的流量,尽管可能是一个。
更好的是,在Visual Studio中使用断点和“中断异常”集进行调试。您可以通过右键单击网站并转到“属性页”然后“启动选项”,告诉VS使用IIS作为服务器。勾选Use custom server
并将您的网址放入文本框中。点击Specific page
,然后选择您的默认页面。
使用相同的DLL将其与我的工作解决方案进行比较,我没有发现处理套接字的任何明显问题,因此我建议现在评论this.name = this.WebSocketContext.QueryString["username"];
并将其替换为{{1}因为这似乎是唯一偏离样本的代码。保持简单直到它的工作!
答案 1 :(得分:0)
问题出在web.config上。 我添加了
Do not keep Activities
到system.web部分,它终于开始工作了