我可以帮忙翻译。以下是翻译的结果:
如果我在另一个.NET应用程序中添加此服务的引用,它就可以完美运行。 但是,我需要从一个HTML + Javascript应用程序中使用此服务,并且我真的不知道如何做到这一点。我无法找到一个好的示例或教程,其中包含使用自托管的WCF WebSocket服务的Javascript客户端。 我能找到的所有Javascript WebSocket代码似乎都非常简单,但我无法使其正常工作。
以下是我的简短JavaScript客户端测试:
我有这个自托管的WCF WebSocket服务代码:
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();
接口:
namespace IWebSocketHostTest
{
[ServiceContract]
interface IWebSocketCallBack
{
[OperationContract(IsOneWay = true)]
void Send(int num);
}
[ServiceContract(CallbackContract = typeof(IWebSocketCallBack))]
public interface IWebSocket
{
[OperationContract]
void StartSend();
}
}
服务:
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();
}
}
}
如果我在另一个.NET应用程序中添加此服务的引用,它就可以完美运行。 但是,我需要从一个HTML + Javascript应用程序中使用此服务,并且我真的不知道如何做到这一点。我无法找到一个好的示例或教程,其中包含使用自托管的WCF WebSocket服务的Javascript客户端。 我能找到的所有Javascript WebSocket代码似乎都非常简单,但我无法使其正常工作。
以下是我的简短JavaScript客户端测试:
var ws = new WebSocket("ws://192.168.1.95:8080/service");
ws.onopen = function () {
console.log("WEBSOCKET CONNECTED");
};
当我使用Fiddler测试时,它返回“WebSocket错误:HTTP响应不正确。状态码400,错误请求”。
我错过了什么?你能否给我一些文档链接以获取更多信息或代码示例?
谢谢!
编辑:
现在我尝试使用“Microsoft.ServiceModel.WebSocket”库来使其工作。
但是,首先,我不知道它是否仍由Microsoft维护或已被弃用,因为我在MSDN上找不到任何信息,而且互联网上的信息很少。
其次,“WebSocketHost”类的“Open()”方法未找到,因此我不知道如何运行服务器...
这是我的代码,我从ASP.NET论坛的问题中获取了它。
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.");
}
}
}
但是,就像我之前说的那样,“host.Open()”方法找不到,所以我不知道是否缺少某些引用或其他东西,因为我找不到关于WebSocketHost类的信息...有什么帮助吗?