C# websocket连接失败?
我是web套接字新手,尝试使用asp.net通用处理程序和JavaScript WebSocket类创建一个 JavaScriptC# websocket连接失败?,c#,javascript,asp.net,websocket,C#,Javascript,Asp.net,Websocket,我是web套接字新手,尝试使用asp.net通用处理程序和JavaScript WebSocket类创建一个 JavaScript <script type="text/javascript"> window.onload= function () { var name = prompt('what is your name?:'); var url = 'ws://localhost:5707/ws.ashx?nam
<script type="text/javascript">
window.onload= function () {
var name = prompt('what is your name?:');
var url = 'ws://localhost:5707/ws.ashx?name=' + name;
var ws = new WebSocket(url);
ws.onopen = function () {
alert('Connection Opened');
};
ws.onmessage = function (e) {
};
ws.onclose = function () {
alert('Connection Close');
};
ws.onerror = function (e) {
alert('Error')
};
}
</script>
类TestWebSocketHandler,它继承自WebSocketHandler
public class TestWebSocketHandler : WebSocketHandler
{
private static WebSocketCollection clients = new WebSocketCollection();
private string name;
public override void OnOpen()
{
this.name = this.WebSocketContext.QueryString["name"];
clients.Add(this);
clients.Broadcast(name + " has connected.");
}
public override void OnMessage(string message)
{
clients.Broadcast(string.Format("{0} said: {1}", name, message));
}
public override void OnClose()
{
clients.Remove(this);
clients.Broadcast(string.Format("{0} has gone away.", name));
}
}
我的问题是
当websocket打算打开时,我注意到当转到处理程序时
context.IsWebSocketRequest // returns false
然后它在客户机上触发错误
Firefox无法在ws://localhost:5707/ws.ashx?name=j上建立与服务器的连接
然后关闭连接实例化
我需要知道问题出在哪里?亲切的
我使用的是windows 7下的vs 2013,我想我使用的IIS 6只能在windows 8或windows 2012上运行的ASP.NET应用程序上运行。尽管.NET4.5.1中包含了API,但如果您不使用这些操作系统,它将无法工作。实际上,如果您尝试使用
ClientWebSocket
,它将抛出一个PlatformNotSupportedException
如果您无法获得这些操作系统中的任何一个,您可以检查其他操作系统:
- XSocket.NET:
- 超级WebSocket:
- 炼金术网匣:
- WebSocketListener:
- IIS版本<8
- windows功能下未启用Web套接字协议
- 具有.NET Framework版本<4.5
- 在web.config的
部分中未包含以下行:system.webServer
- 原因可能是以下任何一种:
您是否使用fiddler或类似工具查看发送/接收的内容?没有,但它将如何帮助您。实际上,您可能需要使用firefox工具;切换到“网络”选项卡,找到web套接字连接,然后查看标题。例如,我在这个网站(stackoverflow.com)上看到了一个例子:-你从你的网站上得到了什么?另外:它在Chrome浏览器中工作吗?不,它在前五大浏览器中都不工作:(也许你是对的,但你给我的参考资料中有哪些工具用于处理.net上的websockets/另一方面,我使用.net framework 3.5.1。它不支持websockets吗?或者它与IIS版本相关吗???@Marwan啊,我没有看到Win 7-重要的是操作系统版本;它使用的web套接字层被烘焙到其中http.sys;但是,如果你真的不能使用不同的OST,那么还有其他可用的web套接字API。它们都可能使用普通的套接字。我开发了WebSocketListener
,它使用普通的TcpListener
来获取Socket
对象并协商WebSocket会话。不过我不会在3.5.1中工作。有什么新功能http.sys提供了将普通http请求转换为WebSocket连接的能力,因此您可以在与网页相同的端口中运行WebSocket。另一方面,我提出的这些替代方案需要作为IIS外部的服务在不同的端口中运行。MS告诉我们,这是一个太大的更改,无法在Windows 7中引入或者Windows server 2008。@vtortola当然,有一种选择是简单地使用NLB将发送到web套接字服务器的请求发送到不同的后端节点。这不是我们自己做的(我们使用不同的域来处理web套接字),但它应该会起作用。我已经走得太远了,我无法得到它。我想我需要做一点关于网络的研究,深入到windows端口之类的东西,所以任何参考资料都会提出建议
context.IsWebSocketRequest // returns false