如何跟踪 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部分,它终于开始工作了
我正在尝试在 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部分,它终于开始工作了