2015-12-04 36 views
0

我使用Juval Lowy的「編程WCF服務」中的ServiceModelEx WCF庫。我正試圖與發佈者和訂閱者一起實施發佈 - 訂閱服務。我迄今所做的是發佈者和發現發佈服務。如何實現WCF ServiceModelEx訂戶?

服務合同:

[ServiceContract] 
interface IMyEvents 
{ 
    [OperationContract(IsOneWay=true)] 
    void OnEvent1(int number); 
} 

發現 - 發佈服務:

class MyPublishService : DiscoveryPublishService<IMyEvents>, IMyEvents 
{ 
    public void OnEvent1(int number) 
    { 
     FireEvent(number); 
    } 
} 

發現 - 發佈服務主機:

ServiceHost host = DiscoveryPublishService<IMyEvents>. 
CreateHost<MyPublishService>(); 
host.Open(); 
// later.. 
host.Close(); 

出版商:

IMyEvents proxy = DiscoveryPublishService<IMyEvents>.CreateChannel(); 
proxy.OnEvent1(); 
(proxy as ICommunicationObject).Close(); 

我的問題是如何實現用戶?該書說實施服務合同。這很簡單。

class EventServiceSubscriber : IMyEvents 
{ 
    public void OnEvent1(int number) 
    { 
     // do something 
    } 
} 

但我怎麼能託管訂戶?用戶如何連接到發佈 - 訂閱服務?

回答

0

圍繞這個問題有一堆文章。首先,this之一。您可以用不同的方式託管您的訂閱者,如控制檯應用程序或ASP.NET應用程序。每種應用程序類型都有一些啓動方法,所以這將是一個實現訂閱/發佈邏輯的好地方。

1

爲了得到這個工作,我創建了一個SubcriptionService如下:

using ServiceLibrary.Contracts; 
using ServiceModelEx; 
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.ServiceModel; 
using System.Text; 
using System.Threading.Tasks; 

namespace Subscriber 
{ 
    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, IncludeExceptionDetailInFaults = DebugHelper.IncludeExceptionDetailInFaults, InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext = false)] 
    class SubscriptionService : DiscoveryPublishService<IMyEvents>, IMyEvents 
    { 
     public void OnEvent1() 
     { 
      Debug.WriteLine("SubscriptionService OnEvent1"); 
     } 

     public void OnEvent2(int number) 
     { 
      Debug.WriteLine("SubscriptionService OnEvent2"); 
     } 

     public void OnEvent3(int number, string text) 
     { 
      Debug.WriteLine("SubscriptionService OnEvent3"); 
     } 
    } 
} 

然後我設置主機此服務如下:

ServiceHost<SubscriptionService> _SubscriptionHost = DiscoveryPublishService<IMyEvents>.CreateHost<SubscriptionService>(); 
_SubscriptionHost.Open(); 

一個基本的工作樣本中可以找到我的Github帳戶在以下網址。

https://github.com/systemsymbiosis/PublishSubscribeWithDiscovery

+0

託管您的服務的最佳方式是創建Windows服務。您可以使用Visual Studio項目創建者中的Windows服務嚮導。 – donovan