WebSockets草稿问题

时间:2011-05-03 01:16:37

标签: c# jquery websocket

我正在使用Web套接字和Microsoft的草案实现。我正在使用它们为服务器提供的API以及对本机不支持Web套接字的浏览器的Silverlight修复。我正在处理的信息来自http://channel9.msdn.com/Events/MIX/MIX11/HTM10http://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:尝试关闭反病毒和防火墙,没有变化 谢谢 - 如果我需要更多代码或信息,请告诉我。

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添加到我服务器上默认网站的根文件夹中。我以为我不得不删除它 - 我误读了一些信息并立即忘记了它。故事的道德:阅读自述!