在目前一些桌面端展示系统的应用中,需要多个子系统窗口进行信息交换,对于部署在同一台电脑上的各个子系统,可以通过集成windows系统的消息传递方式进行消息传递,但是假如将各个子系统部署在不同的电脑上,这种实现方式就有一定的局限性,要涉及到网络中的不同电脑进行通信,.net提供了可以建一个小的http服务器,可以绑定计算机的端口进行通信,且提供了异步的实现方式,能实现无阻塞的消息通信。

具体实现://启动一个监听,并绑定端口,MSDN有详细参数说明publicboolStartListener(string[]prefixes){boolisSuccess=false;if(HttpListener.IsSupported){HttpListenerlistener=newHttpListener();foreach(stringsinprefixes){listener.Prefixes.Add(s);}listener.Start();varresult=listener.BeginGetContext(newAsyncCallback(ListenerCallback),listener);isSuccess=true;//Console.WriteLine("Waitingforrequesttobeprocessedasyncronously.");//result.AsyncWaitHandle.WaitOne();//listener.Close();}returnisSuccess;}publicvoidStopListener(){if(listener!=null){if(listener.IsListening){listener.Stop();}listener.Close();}}//异步接收数据,并进行下一次的privatevoidListenerCallback(IAsyncResultresult){HttpListenerlistener=(HttpListener)result.AsyncState;HttpListenerContextcontext=listener.EndGetContext(result);HttpListenerRequestrequest=context.Request;HttpListenerResponseresponse=context.Response;response.ContentType="text/plain";System.IO.Streamoutput=response.OutputStream;stringresponseString="true";try{if(MessageAction!=null){System.IO.StreaminputStream=request.InputStream;stringresStr=string.Empty;if(inputStream.CanRead){byte[]bytes=newbyte[request.ContentLength74];intnumBytesToRead=(int)request.ContentLength74;inputStream.Read(bytes,0,numBytesToRead);inputStream.Close();resStr=Encoding.UTF8.GetString(bytes);}MessageAction(resStr);}}catch(Exceptionex){responseString="false";}byte[]buffer=System.Text.Encoding.UTF8.GetBytes(responseString);response.ContentLength74=buffer.Length;output.Write(buffer,0,buffer.Length);output.Close();result=listener.BeginGetContext(newAsyncCallback(ListenerCallback),listener);}

将建立好的代码集成到应用程序里,使用.Net的webclient就可以进行消息的操作。