我有一个API控制器,可以创建一个Web套接字连接,并且在使用JavaScript时可以很好地连接和交互,但我也希望能够使用C#客户端连接到它。我尝试了几个不同的库(Alchemy,WebSocket4Net和WebSocket-Sharp),它们似乎都在连接打开时超时。
以下是服务器端的代码:
class WsController : ApiController
{
public HttpResponseMessage Get(string id)
{
HttpContext.Current.AcceptWebSocketRequest(new WsHandler(id));
return Request.CreateResponse(HttpStatusCode.SwitchingProtocols);
}
internal class WsHandler : WebSocketHandler
{
public WsHandler(string id) { /* ... */ }
}
}
如果我使用的是JS客户端,我可以使用var ws = new WebSocket(url + "?id=someid");
进行连接,然后发送和接收消息。使用C#客户端时,我在握手期间卡住,连接超时。这是使用WebSocket4Net的一些示例代码。
var ws = new WebSocket(url);
ws.Opened += new EventHandler(ws_Connect);
ws.Closed += new EventHandler(ws_Disconnect);
ws.Error += new EventHandler<ErrorEventArgs>(ws_Error);
ws.MessageReceived += new EventHandler<MessageReceivedEventArgs>(ws_Receive);
ws.Open(); // Timeout on this line. No errors are thrown to ws_Error.
是否有另一种方法可以使用MVC ApiController
创建websocket服务器?