2017-05-19 9 views
2

私はService Fabricの初心者です。私はRunAsyncで属性「カウンタ」をインクリメントする信頼できるステートレスサービスを行っています。私は、明らかにCreateServiceInstanceListenersをオーバーライドしてCreateServiceRemotingListenerを追加することで、このカウンタ値(ServiceProxy経由でクライアントから呼び出されるメソッド)を返すメソッドをインターフェイスIServiceで公開できることを確認しました。 は、それから私は(指定されたポート7080でリッスン)別のカスタム通信リスナーSS1ServiceEndpoint追加しようとしました:サービスファブリックリムーバルリスナーと通信リスナーが同時に動作しない

<Endpoint Name="RemoteListener" /> 
<Endpoint Name="SS1ServiceEndpoint" Protocol="http" Port="7080" Type="Input" /> 

をが、サービスは当初、カスタムリスナーのOpenAsyncメソッドが呼び出され

Exception thrown: 'System.ArgumentException' in Microsoft.ServiceFabric.FabricTransport.dll 

をスローしますより多くの時間と別の例外がスローされた呼び出しごとの後:

Exception thrown: 'System.ObjectDisposedException' in mscorlib.dll 
Exception thrown: 'System.AggregateException' in mscorlib.dll 
Exception thrown: 'System.Fabric.FabricElementAlreadyExistsException' in 
System.Fabric.dll 
Exception thrown: 'System.ArgumentException' in 
Microsoft.ServiceFabric.FabricTransport.dll 

Iは、CrでCreateServiceRemotingListenerを削除した場合eateServiceInstanceListenersを呼び出すと、サービスが開始され、リスニングポートのブラウザから呼び出すことができます。

私の質問です:複数のリスナーはサポートされていませんか?私は2つのカスタムリスナー(異なるポート上)で試したことはありません。

答えて

3

複数のリスナーがサポートされていますが、リスナーの名前を指定する必要があります。 CreateServiceInstanceListenersにリスナーの名前を追加してみてください。

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
{ 
    return new[] 
    { 
     new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context), "RemotingListener"), 
     new ServiceInstanceListener(context => new CustomListener(), "CustomListenerName") 
    }; 
} 
+1

素晴らしい!それは私の問題を解決します:) MSDNのドキュメントから、それほど明確ではありませんでした! もう1つの質問:この方法で、同じプロジェクトに含まれる実際のWebAPIを公開することができますか、ステートレスサービスプロジェクトとWebAPIプロジェクトを分離する方が良いでしょうか? ありがとうございます! –

+0

同じサービスにWebAPIを追加できます。同じサービスに入れるかどうかは、デザインによって決まります。マイクロサービスアーキテクチャを使用していることに注意してください。 WebAPIがカウンタのみを返す場合は、同じサービスに追加する必要があります(WebAPIはカウンタのエンドポイントとしてのみ機能します)。あなたのWebAPIに多くの機能がある場合、そのうちの1つはカウンタを返すことです。それに対して別のサービスを作成し、サービスリモーティング(カウンタはもっと大きなものの一部です)を使用してカウンタを取得します。 –

+0

私は複数のリスナーと遊んでいたときに、それがはっきりしていないことに完全に同意しました。 – Mardoxx

関連する問題