我正在尝试在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://方案的响应正文,所以我什至无法在开发人员工具的网络选项卡中看到它(尽管 IIS 提供了正文,正如我从响应的内容长度中看到的那样)。在这种情况下,有没有办法查看响应正文?或者我在 IIS 中的 WebSocket 中缺少什么?
问题出在web.config上。我添加了
<httpRuntime targetFramework="4.5.1" />
到系统.Web部分,它终于开始工作了
您应该能够在 Windows 事件查看器中看到错误的原因。
Fiddler将向您显示连接,并且它已升级到Web套接字,因此您可以使用该工具至少显示连接是否有效。我不知道有什么工具可以在升级套接字后向您显示流经套接字的流量,尽管可能有。
更好的是,在Visual Studio中调试它,设置断点和"异常时中断"。可以通过右键单击网站并转到"属性页",然后转到"启动选项"来告诉 VS 使用 IIS 作为服务器。勾选Use custom server
并将您的URL放入文本框中。单击Specific page
并选择默认页面。
将其与我使用相同的 DLL 的工作解决方案进行比较,我没有发现套接字处理的任何明显问题,因此我建议暂时注释掉this.name = this.WebSocketContext.QueryString["username"];
并将其替换为 this.name = "TEST";
,因为这似乎是关于唯一偏离示例的代码。保持简单,直到它工作!