Tag: websocket

Alchemy-Websockets – WebSocketClient抛出NullReferenceException

我有两个C#程序应该通过WebSockets进行通信,服务器工作正常(也使用Alchemy)并且已经有一段时间了(使用javascript客户端)。 但是,连接Alchemy WebSocketClient导致在客户端抛出NullReferenceException 。 经过一些调试后,我发现由于_context.Connection.Connected调用,在WebSocketClient.cs的第187行抛出exception。 _context.Connection是与local _client相同的实例,并且在那个时间点都不为null。 在msdn.microsoft.com上的TcpClient.Connected页面上没有列出可能的exception(指示我不应该抛出任何exception)。 回过头来,我注意到_client类变量在WebSocketClient.cs第176行从正常查看的实例更改为填充exception的实例: 前行176 线路后176 在这一行之后,刚刚在第187行添加的Context的Dispose()方法被称为断开Connection (这与我之前在Context.cs第131行提到的_client相同)。 我的问题是:为什么会发生这种情况,如何阻止它发生并成功连接到所需的WebSocketServer? 如果您需要更多信息,请在评论中不要犹豫。 编辑1 例外情况仅在服务器实际侦听时发生,如果服务器处于非活动状态,则未到达WebSocketClient.cs第176行(这是正确的行为,因为在建立与服务器的连接时调用OnRunClient() )。 编辑2 按照StackTrace的要求: System.NullReferenceException was unhandled HResult=-2147467261 Message=Object reference not set to an instance of an object. Source=System StackTrace: at System.Net.Sockets.TcpClient.get_Connected() at Alchemy.WebSocketClient.SetupContext(Context context) in C:\…\Alchemy\WebSocketClient.cs:regel 187 at Alchemy.WebSocketClient.HandleClientThread() in C:\…\Alchemy\WebSocketClient.cs:regel 94 at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, […]

如何在ASP.NET Core RC2中制作websocket服务器?

我使用“Microsoft.AspNetCore.WebSockets.Server”:“0.1.0-rc2-final”来制作websocket服务器,但不起作用。 (在rc1中,它是1.0.0-rc1-final,它工作正常…) 这是我的代码: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection(“Logging”)); loggerFactory.AddDebug(); app.UseWebSockets(); app.Use(async (http, next) => { if (http.WebSockets.IsWebSocketRequest) { IHandler handler = WebsocketManager.getHandler(http.Request.Path); if (handler == null) { await next(); } else { var webSocket = await http.WebSockets.AcceptWebSocketAsync(); if (webSocket != null && webSocket.State == WebSocketState.Open) { // TODO: Handle the […]

使用MVC控制器将websockets连接到windows azure

我试图在这里做一个例子: http : //www.codeguru.com/csharp/csharp/programming-html5-web-sockets-in-asp.net-4.5.htm (但有点扭曲,我用MVC控制器作为建立Web套接字连接的门户) 这是我在mvc4中的控制器: public class HandleWSController : Controller { // // GET: /HandleWS/ public ActionResult Index() { if (ControllerContext.HttpContext.IsWebSocketRequest) { Trace.WriteLine(“Inside IsWebSocketRequest check”); ControllerContext.HttpContext.AcceptWebSocketRequest(DoTalking); } return View(); } public async Task DoTalking(AspNetWebSocketContext context) { Trace.WriteLine(“Inside DoTalking”); WebSocket socket = context.WebSocket; while (true) { var buffer = new ArraySegment(new byte[1024]); WebSocketReceiveResult result = […]

使用WebSockets的自托管WCF无法使用SSL

我在控制台应用程序中有此代码。 我试图从开发工具chrome连接,但得到此错误,虽然问题肯定在WCF方面: WebSocket connection to ‘wss://127.0.0.1:5650/Echo’ failed: Error in connection establishment: net::ERR_CONNECTION_RESET WSS没有达到我的服务器代码,没有例外,甚至没有日志。 最小修改的WS工作正常。 我使用nuget的Microsoft.WebSockets来简化代码: WebSocketHost server = new WebSocketHost(typeof(EchoWSService), new Uri(“https://127.0.0.1:5650/Echo”)); var bindingSsl = WebSocketHost.CreateWebSocketBinding(true); server.AddWebSocketEndpoint(bindingSsl); server.Open(); 我已经尝试过自定义证书validation器,但正如我所说它没有达到我的代码。 现在我有一个相同的代码,除了使用ServiceRoute的ASP.net应用程序中的server.Open() ,它工作得很好! 是的SSL和VS为IIS Express生成的自签名证书: RouteTable.Routes.Add(new ServiceRoute(“Echo”, new TRWebSocketServiceFactory(), typeof(EchoWSService))); 浏览器方面只有: var ws = new WebSocket(‘wss://127.0.0.1:5650/Echo’) 在web.config我没有超过 那么为什么地狱不能在一个简单的控制台应用程序中运行我自己托管的WCF呢?

WebSocket读取字符串

我知道所有内容都在websocket中作为字符串传递但我有这两个函数: function read_string(id) { if (recvpos[id][recvbufi[id]] >= recvsize[id][recvbufi[id]]) recvbufi[id]++; if (recvbufi[id] >= recvbuf[id].length) return “”; var str = new String(“”); while(1) { var buf = new Uint8Array(recvbuf[id][recvbufi[id]], recvpos[id][recvbufi[id]]+2, 1); recvpos[id][recvbufi[id]] += 1; if (buf[0] == 0) return str; str += String.fromCharCode(buf[0]); } } function recv(id) { if (sockets[id].readyState == 2 || sockets[id].readyState == 3) return […]

使用OWIN的Websockets

到目前为止我在网络api上使用Microsoft WebSockets的所有示例都使用IIS,实现是在get方法上将HTTP连接升级为websocket,并将websocket处理程序的实例传递给HTTPContext public HttpResponseMessage Get() { if (HttpContext.Current.IsWebSocketRequest) { var noteHandler = new NoteSocketHandler(); HttpContext.Current.AcceptWebSocketRequest(noteHandler); } return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols); } 我想要实现的是在OWIN管道上做同样的事情。 我面临的问题是连接正在升级以使用Websockets,但它没有使用我的websocket处理程序。 我哪里错了? 请建议。 使用OwinContext的控制器(遵循Nancy使用OWIN的示例WebSockets ), public HttpResponseMessage Get() { IOwinContext owinContext = Request.GetOwinContext(); WebSocketAccept acceptToken = owinContext.Get(“websocket.Accept”); if (acceptToken != null) { var requestHeaders = GetValue<IDictionary>(owinContext.Environment, “owin.RequestHeaders”); Dictionary acceptOptions = null; string[] subProtocols; if […]

如何在.Net中优雅地关闭双向WebSocket

我有一个WebSocket服务器,它接受来自客户端的二进制数据流,并响应每4MB读取的另一个文本数据流。 服务器使用IIS 8和asp.net web api 。 服务器 public class WebSocketController : ApiController { public HttpResponseMessage Get() { if (!HttpContext.Current.IsWebSocketRequest) { return new HttpResponseMessage(HttpStatusCode.BadRequest); } HttpContext.Current.AcceptWebSocketRequest(async (context) => { try { WebSocket socket = context.WebSocket; byte[] requestBuffer = new byte[4194304]; int offset = 0; while (socket.State == WebSocketState.Open) { var requestSegment = new ArraySegment(requestBuffer, offset, requestBuffer.Length […]

在C#SSL WebSocket客户端是.net 4.0吗?

我想知道目前是否有任何关于这个主题的内容:我已经找到了各种例子EG: c#的4.5s system.net.websockets.websocket for ssl(wss://)客户端我想知道是否有可靠的ssl版本在那里,因为这个类似的问题得到了回答。 但我正在使用Visual c#2010开发,这是一个winforms C# 客户端应用程序,必须接收服务器推送,但它是Windows 7,所以我不能使用net 4.5。 (注:重视客户 ) 如果任何人有任何实际的SSL代码(希望一个不一定强制执行证书身份validation提示)我会很感激 – 我更喜欢代码示例 – 但我会采用命名空间解决方案。 提前致谢:-)

.net WebSocket:CloseOutputAsync vs CloseAsync

我们有一个有效的ASP.NET Web API REST服务,它使用HttpContext.AcceptWebSocketResponse(..)在我们的控制器方法之一上使用WebSockets。 代码看起来像这样的套接字处理程序…… public async Task SocketHandler(AspNetWebSocketContext context) { _webSocket = context.WebSocket; … while(!cts.IsCancellationRequested) { WebSocketReceiveResult result = _webSocket.ReceiveAsync(inputSegment, cts.Token).Result; WebSocketState currentSocketState = _webSocket.State; if (result.MessageType == WebSocketMessageType.Close || currentSocketState == WebSocketState.CloseReceived) { // Should I use .CloseAysnc() or .CloseOutputAsync()? _webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, “client requested”, cts.Token).Wait(); } if (currentSocketState == WebSocketState.Open) { … } } […]

在MVC控制器内打开websocket通道

有没有人在MVC控制器内打开websocket连接有任何经验? 技术堆栈: ASPNET Core 1.0(RC1)MVC,dnx46,System.Net.WebSockets 为什么MVC而不是中间件:为了整体一致性,路由,已经注入的存储库,在同一个控制器中调用私有方法的选项。 [HttpGet(“v1/resources/{id}”)] public async Task GetAsync(string id) { var resource = await this.repository.GetAsync(id); if (resource == null) { return new HttpStatusCodeResult(404); } if (this.HttpContext.WebSockets.IsWebSocketRequest) { var webSocket = await this.HttpContext.WebSockets.AcceptWebSocketAsync(); if (webSocket != null && webSocket.State == WebSocketState.Open) { while (true) { var response = string.Format(“Hello! Time {0}”, System.DateTime.Now.ToString()); var […]