使用WCF - Named Pipe去做IPC

1 篇文章 0 订阅

转自http://www.dotblogs.com.tw/maxi/archive/2010/07/07/16440.aspx

透過WCF,可以把程式與程式之間的通訊簡化.這裡會用Named pipe去做Inter Process Communication.WCF是把通訊統一化的工具,所以不用擔心通訊方法,理論上做一些小修改就可變換通訊方法.

要建立通訊,共分開三個部份: 訂立合約, 建立服務, 使用服務.

首先來建立服務合約, 其實就是定一個interface作為溝通協議, 首先建立一個library專案, 加入System.ServiceModel參考.

using System.ServiceModel;  
 namespace Wcf.Test  
 { 
    [ServiceContract]  
    public interface IService  
    {  
       void IsCalled(string message);  
    } 
} 

這樣就定好一個簡單的合約, 然後在服務提供端和使用端都加入這個library的參考就可以.

接下來建立服務提供端. 這裡我們會使用Named pipe作為溝通方法, 首先需要按照合約實作服務

namespace Wcf.Test  
 {  
     [ServiceBehavior(IncludeExceptionDetailInFaults = true)]  
     public class MyService : IService  
     {  
         public void IsCalled(string message)  
         {  
             // do something  
         }  
     }  
 } 

然後在程式執行時,啟動服務.

string l_serviceAddress = "net.pipe://yourHostAddress";  
 m_Service = new ServiceHost(typeof(MyService), new Uri[] { new Uri(l_serviceAddress) });  
 m_Service.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "CallMe");  
 m_Service.Open(); 

通訊類型就是根據你的字串來建立的,named pipe是"net.pipe://", yourHostAddress例如可以是IP,或者localhost,請參考MSDN的說明.注意!建立ServiceHost時要傳遞的是Service Class的名稱,加入Service Endpoint時傳遞的卻是合約名稱. named pipe要配合NetNamedPipeBinding()來使用.最後的參數是你想給服務的名稱.然後用Open()啟動服務.

最後來使用這一項服務.

string l_serviceAddress = "net.pipe://serviceHostName/CallMe";  
             ChannelFactory<IService> l_factory = new ChannelFactory<IService>(new NetNamedPipeBinding(), new EndpointAddress(l_serviceAddress));  
             IService l_Service = l_factory.CreateChannel();  
             try 
             {  
                 l_Service.IsCalled("Message");  
             }  
             catch (EndpointNotFoundException epnfex)  
             {  
                 //write event log. do nothing  
             } 

Service address跟建立Service host時一樣,後面再加上服務名稱,也就是上面設定的"CallMe", 使用服務時不用實作合約,也不需要知道host的實作型別,只需要用合約介面建立一個factory,再從factory產生出使用服務的channel,接下來就跟一般method call沒有分別.記得要處理EndPointNotFoundException.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值