我正在使用Web套接字和Microsoft的草案实现。我正在使用它们为服务器提供的API以及对本机不支持Web套接字的浏览器的Silverlight修复。我正在处理的信息来自http://channel9.msdn.com/Events/MIX/MIX11/HTM10和http://html5labs.interoperabilitybridges.com/prototypes/websockets/websockets/info 我的代码编译好了,它开始打开连接,然后失败。这是我的后端服务器代码(在C#控制台应用程序中)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.ServiceModel.WebSockets;
namespace ChatBackend
{
class Program
{
static void Main(string[] args)
{
var host = new WebSocketsHost<MessageHandler>();
host.AddWebSocketsEndpoint("ws://localhost:4502/MessageHandler");
host.Open();
Console.ReadLine();
}
}
}
这是MessageHandler类:
class MessageHandler : WebSocketsService
{
public override void OnMessage(string value)
{
string returnMessage = "You just said '" + value + "'";
Console.WriteLine(value);
SendMessage(returnMessage);
}
}
这个后端部分似乎工作正常。这是客户端:
$(document).ready(function () {
setTimeout(connect, 2050);
});
function connect() {
websocket = new WebSocketDraft("ws://localhost:4502/MessageHandler");
websocket.onopen = function() {
websocket.send("test");
};
websocket.onclose = function () {
alert("DIED");
};
websocket.onmessage = function(event) {
sendMessage(new message(0, event.data, 0));
};
}
编辑:我检查了我的防火墙并允许我正在使用的端口。现在连接只是挂起 - 它没有关闭,它没有打开。有什么想法吗?
编辑2:我做了更多的研究,结果我需要删除clientaccesspolicy.xml。事实证明我从来没有,但我返回自定义302重定向而不是找不到404。修正了,但没有进展。它只是挂起。
编辑3:尝试关闭反病毒和防火墙,没有变化 谢谢 - 如果我需要更多代码或信息,请告诉我。
答案 0 :(得分:1)
你可以使用Firebug或其他东西在jquery.slws.js中的这一行放一个断点(假设它是你正在使用的那个!)
this.slws = slCtl.Content.services.createObject("websocket");
然后逐步查看失败的地方?
答案 1 :(得分:0)
您的网址肯定与服务器端的设置相符。很难找到任何实际使用的WebSockets的例子,因为它仍然是一种新技术,但是从我能够找到的唯一可行的例子(它是在html5labs网站上),我想也许你正在尝试在完成打开之前写入套接字。在我发现的示例中,它看起来像是检查套接字的readyState属性,并且只有tryady = = 1才尝试send
。该示例中的套接字通过绑定到$(document).ready
来打开事件,并通过点击按钮调用发送。
答案 2 :(得分:0)
终于搞定了!结果我不得不将clientaccesspolicy.xml添加到我服务器上默认网站的根文件夹中。我以为我不得不删除它 - 我误读了一些信息并立即忘记了它。故事的道德:阅读自述!