如何跟踪 WebSockets (ws://) 上的 500 错误

How to track 500 errors on WebSockets (ws://)

我正在尝试在 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 客户端。项目构建正常,但是当我尝试连接到处理程序时,出现 returns 错误 500。问题是我看不到确切的错误是什么,因为 Chrome 和 FF 都没有加载响应主体对于 ws:// 方案,所以我什至无法在开发人员工具的网络选项卡中看到它(尽管 IIS 提供了正文,正如我从响应的内容长度中看到的那样)。 在这种情况下有没有办法看到响应体?或者我缺少 IIS 中的 WebSockets 什么?

您应该能够在 Windows 事件查看器中查看错误原因。

Fiddler 将向您显示连接并且它已升级到网络套接字,因此您可以使用该工具至少向您显示连接是否有效。我不知道有什么工具可以显示升级后流经套接字的流量,尽管 可能 是一个。

更好的是,在 Visual Studio 中使用断点和 'break on exception' 设置对其进行调试。您可以通过右键单击该网站并转到 属性 页面然后启动选项来告诉 VS 使用 IIS 作为服务器。勾选 Use custom server 并将 URL 放入文本框。单击 Specific page 并选择您的默认页面。

将它与我使用相同 DLL 的工作解决方案进行比较,我没有发现任何明显的套接字处理问题,因此我建议暂时注释掉 this.name = this.WebSocketContext.QueryString["username"]; 并将其替换为 this.name = "TEST"; 因为这似乎是唯一偏离样本的代码。保持简单直到它起作用!

问题出在 web.config。 我加了

<httpRuntime targetFramework="4.5.1" />

到system.web部分,它终于开始工作了