Von WCF selbst gehosteter WebSocket-Service mit Javascript-Client

Ich habe diesen von WCF selbst gehosteten WebSocket-Servicecode:

Main:

//Create a URI to serve as the base address
Uri httpUrl = new Uri("http://192.168.1.95:8080/service");
//Create ServiceHost
ServiceHost host = new ServiceHost(typeof(WebSocketService), httpUrl);            
//Add a service endpoint
host.AddServiceEndpoint(typeof(IWebSocket), new NetHttpBinding(), "");
//Enable metadata exchange
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
//Start the Service
host.Open();

Console.WriteLine("Service is host at " + DateTime.Now.ToString());
Console.WriteLine("Host is running... Press <Enter> key to stop");
Console.ReadLine();

Schnittstelle:

namespace IWebSocketHostTest
{
    [ServiceContract]
    interface IWebSocketCallBack
    {
        [OperationContract(IsOneWay = true)]
        void Send(int num);
    }

    [ServiceContract(CallbackContract = typeof(IWebSocketCallBack))]
    public interface IWebSocket
    {
        [OperationContract]
        void StartSend();
    }
}

Bedienung:

namespace IWebSocketHostTest
{

class WebSocketService : IWebSocket
{
    Timer timer = null;

    List<IWebSocketCallBack> callbackClientList = null;        

    public WebSocketService()
    {
        callbackClientList = new List<IWebSocketCallBack>();

        timer = new Timer(3000);
        timer.Elapsed += new ElapsedEventHandler(sendNumber);
        timer.Start();
    }

    public void StartSend()
    {
        sender.addClient(OperationContext.Current.GetCallbackChannel<IWebSocketCallBack>());            
    }

    private void sendNumber(Object o, ElapsedEventArgs eea)
    {
        timer.Stop();
        var random = new Random();
        int randomNum = random.Next(100);
        foreach (IWebSocketCallBack callback in callbackClientList)
        {
            callback.Send(randomNum);
        }

        timer.Interval = random.Next(1000, 10000);
        timer.Start();
    }

}
}

Dies funktioniert perfekt, wenn ich einen Verweis auf diesen Dienst in einer anderen .NET-Anwendung hinzufüge. Was ich aber brauche, ist, diesen Service von einer HTML + Javascript-Anwendung zu nutzen, und ich bin wirklich verloren, wie das geht. Ich konnte kein gutes Beispiel oder Tutorial für einen Javascript-Client finden, der einen selbst gehosteten WCF-WebSocket-Dienst verwendet. Der gesamte Javascript-WebSocket-Code, den ich finden konnte, scheint sehr einfach zu sein, aber ich konnte ihn nicht zum Laufen bringen.

Hier ist mein kurzer JavaScript-Client-Test:

var ws = new WebSocket("ws://192.168.1.95:8080/service");
            ws.onopen = function () {
                console.log("WEBSOCKET CONNECTED");
            };

es gibt "WebSocket Error: Falsche HTTP-Antwort. Statuscode 400, Bad Request" zurück, der es mit Fiddler testet.

Was vermisse ich? Könnten Sie mir bitte einige Dokumentlinks geben, um weitere Informationen oder ein Codebeispiel zu erhalten?

Danke!

BEARBEITEN:

Jetzt habe ich versucht, die Bibliothek "Microsoft.ServiceModel.WebSocket" zu verwenden um zu versuchen, es zum Laufen zu bringen.

Aber zuerst weiß ich nicht, ob es noch von Microsoft gepflegt wird oder ob es veraltet ist, weil ich keine Informationen bei MSDN finden konnte und es nur wenige Informationen im Internet gibt. Und zweitens wurde die "Open ()" - Methode der "WebSocketHost" -Klasse nicht gefunden, sodass ich nicht weiß, wie der Server ausgeführt werden soll ...

Hier ist mein Code, ich habe ihn von einem übernommenFrage im ASP.NET-Forum.

using System;
using Microsoft.ServiceModel.WebSockets;

namespace WebSocketTest
{
class Program
{
    static void Main(string[] args)
    {
        var host = new WebSocketHost<EchoService>(new Uri("ws://localhost:8080/echo"));
        host.AddWebSocketEndpoint();
        host.Open();

        Console.Read();

        host.Close();
    }
}

class EchoService : WebSocketService
{

    public override void OnOpen()
    {
        base.OnOpen();
        Console.WriteLine("WebSocket opened.");
    }

    public override void OnMessage(string message)
    {
        Console.WriteLine("Echoing to client:");
        Console.WriteLine(message);

        this.Send(message);
    }

    protected override void OnClose()
    {
        base.OnClose();
        Console.WriteLine("WebSocket closed.");
    }

    protected override void OnError()
    {
        base.OnError();
        Console.WriteLine("WebSocket error occured.");
    }
}
}

Wie ich bereits sagte, wurde die "host.Open ()" - Methode nicht gefunden, daher weiß ich nicht, ob mir eine Referenz fehlt oder was, da ich keine Informationen über die WebSocketHost-Klasse finden konnte ... Irgendeine Hilfe?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage