csstome 发表于 2013-2-1 11:38:23

C#中用NamedPipe进程间通信

本文只是一个测试例子,核心代码是kernel32.dll中的一组windows api函数,这里不深入研究,代码都在codeproject上。
http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx
测试效果如下,可以做到aspx和给console app发送消息后得到反馈:
http://p.blog.csdn.net/images/p_blog_csdn_net/jinjazz/EntryImages/20090203/namepiped.jpg
console app为服务器端代码如下
using System;using AppModule.InterProcessComm;using AppModule.NamedPipes;using System.Threading;namespace Server{    class Program    {      //**c#中用namedpipe进程间通信      //**组件代码来自codeproject      //**http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx         //**下载上面链接中的代码,编译AppModule.InterProcessComm和AppModule.NamedPipes两个dll      //**引用这两个dll到本例中,运行如下代码作为服务器端测试      //**测试代码by jinjazz(因为原作者的两个测试程序比较复杂,这里简化后供大家参考)      static void Main(string[] args)      {            ServerPipeConnection PipeConnection = new ServerPipeConnection("np-test-by-jinjazz", 512, 512, 5000, false);            Console.WriteLine("listening..");            while (true)            {                try                {                  PipeConnection.Disconnect();                  PipeConnection.Connect();                  string request = PipeConnection.Read();                  if (!string.IsNullOrEmpty(request))                  {                        Console.WriteLine("get:" + request);                        PipeConnection.Write("get:" + request);                        if (request.ToLower() == "break") break;                  }                }                catch (Exception ex)                {                  Console.WriteLine(ex.Message);                  break;                }            }            PipeConnection.Dispose();            Console.Write("press any key to exit..");            Console.Read();      }    }}
客户端的aspx代码如下
using System;using System.Web;using AppModule.InterProcessComm;using AppModule.NamedPipes;public partial class _Default : System.Web.UI.Page {    protected void Page_Load(object sender, EventArgs e)    {      Response.Write(SendRequest("测试asdf"));    }    /// <summary>    /// 测试namepiped客户端    /// </summary>    /// <param name="request">发送命令</param>    /// <returns>返回数据</returns>    string SendRequest(string request)    {      string response="";      IInterProcessConnection clientConnection = null;      try      {            clientConnection = new ClientPipeConnection("np-test-by-jinjazz", ".");            clientConnection.Connect();            clientConnection.Write(request);            response=clientConnection.Read();            clientConnection.Close();      }      catch (Exception ex)      {            clientConnection.Dispose();            response = ex.Message;      }      return response;    }}
测试环境为windows vista和windows2003
页: [1]
查看完整版本: C#中用NamedPipe进程间通信