0

Juval Lowy の「Programming WCF Services」の ServiceModelEx WCF ライブラリを使用しています。パブリッシャーとサブスクライバーを使用してパブリッシュ-サブスクライブ サービスを実装しようとしています。これまでに行ったことは、パブリッシャーとディスカバー・パブリッシュ・サービスです。

サービス契約:

[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
    }
}

しかし、どうすればサブスクライバーをホストできますか? サブスクライバーはどのように Publish-Subscribe サービスに接続できますか?

4

2 に答える 2

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();

基本的な作業サンプルは、次の URL の私の Github アカウントにあります。

https://github.com/systemsymbiosis/PublishSubscribeWithDiscovery

于 2016-07-30T12:51:43.360 に答える
0

このテーマをカバーする記事がたくさんあります。手始めに、これ。コンソール アプリケーションや ASP.NET アプリケーションなど、さまざまな方法でサブスクライバーをホストできます。すべてのアプリケーション タイプには、何らかの種類のスタートアップ メソッドがあるため、サブスクリプション/パブリッシング ロジックを実装するのに適しています。

于 2015-12-04T09:58:02.333 に答える