2017-03-02 5 views
1

私はWebSocketサーバーとして使用しているステートレスサービスを持っています。そのために私はICommunicationListenerを使用しています。また、ServiceProxyを使用してこのサービスのメソッドを呼び出したいとします。それで、私はServiceRemotingListenerを使用しています。サービスファブリックサービスで2種類のリスナーを使用できますか?

internal sealed class Stateless : StatelessService, ICommunicationListener, IStatelessServiceInterface 
{   
    public Stateless(StatelessServiceContext context) 
     : base(context){ }  

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
    {   
     return new List<ServiceInstanceListener>() 
     { 
      new ServiceInstanceListener((context) =>this.CreateServiceRemotingListener(context)), 
      new ServiceInstanceListener(_ => this) 
     }; 
    }..... 

私は、リスナーの両方を使用していたときにそう、診断イベントでアプリケーションを実行した後、私は取得していますメッセージ:ソケットが動作していないclose.So用WebSocketに起こっています。

だから私は一緒に2つのタイプのリスナーを使うことができますか?または私の問題の解決策はありますか?

+0

あなたはOpenAsyncを表示することができますか?ソケットが閉じられている理由はわかっていますか?ファイアウォールが設定されてServiceManifestのEndpointsセクションには何がありますか? – cassandrad

+0

remotingListenerを使用しない場合、websocketは正常に動作しています。 – Santanu

+0

Santanu

答えて

0

これは私のOpenAsyncです:

public Task<string> OpenAsync(CancellationToken cancellationToken) 
{ 
     EndpointResourceDescription serviceEndpoint = this.serviceContext.CodePackageActivationContext.GetEndpoint("ServiceEndpoint"); 
     int port = serviceEndpoint.Port; 
     this.listeningAddress = string.Format(CultureInfo.InvariantCulture, "http://+:{0}/{1}{2}", port, this.appRoot, this.webSocketRoot); 
     this.publishAddress = this.listeningAddress.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN); 

     this.Start(); 
     return Task.FromResult(this.publishAddress); 
    } 
+0

したがって、基本的に、両方のリスナーに同じアドレスとポートを公開していますか?それはそのようには機能しません。少なくとも、異なる名前とパスの両方の名前を持つ第2のエンドポイントを、最初のインスタンス・リスナーと2番目のインスタンス・リスナーに追加します。または、OpenAsyncのコードでポートを変更するだけです。 – cassandrad

+0

はい。別の名前の2番目のエンドポイントがあります。 しかし、私はあなたが言ったことを理解していません: "両方の名前を最初のインスタンスリスナーと2番目のパス" – Santanu

+0

ちょうどミスタイプ。つまり、各リスナーがどのエンドポイントに属しているかを知るために、名前をインスタンスリスナーに配置する必要があるということです。ちなみに、Remotingのエンドポイントは、入力ではなく内部型を持ち、TCPを使用します。 – cassandrad

関連する問題