1

アプリケーション サーバーは、net.tcp トランスポートを介して 5 つの WCF サービスをすべて同じポートで公開します。開発中に WcfSvcHost を使用してこれらをホストしてきましたが、これらが同じポートを使用する方法について考える必要はありませんでした。

現在、それらを Windows サービスに移行しており、ServiceHost インスタンスを自分でインスタンス化しています。サービスの 1 つは Streamed TransferMode over Tcp を使用します。

WcfSvcHost で構成ファイルを使用してこれらのサービスを開始すると、正常に動作します。しかし、私たちのサービスでは、ポートが使用中であると不平を言っています。

ストリーミング サービスが同じポートを使用できるようにする必要がありますか?

4

3 に答える 3

2

バインディングのプログラムによる構成で多くの試行錯誤を繰り返した後、最終的に問題を解決しました。

を作成したときに生成されたバインディング スタック内の何かNetTcpBindingにより、複数NetTcpBindingの がポートを共有できるようになっているようです。問題は、カスタム バインディングを作成する必要があることでした。

解決策は、に基づいてNetTcpBindingカスタムバインディングを作成することになりました。例えば:

        var lBinding = new NetTcpBinding() 
        {
            SendTimeout = TimeSpan.FromMinutes(5),
            ReceiveTimeout = TimeSpan.FromMinutes(5),

            MaxConnections = 100,
            ReliableSession = new OptionalReliableSession 
            { 
                Enabled = true,
                Ordered = true,
                InactivityTimeout = TimeSpan.FromMinutes(30)
            },
            Security = new NetTcpSecurity
            { 
                Mode = SecurityMode.TransportWithMessageCredential,
                Message = new MessageSecurityOverTcp { ClientCredentialType = MessageCredentialType.UserName } 
            },
            MaxReceivedMessageSize = 524288
        };

        var lCustomBinding = new CustomBinding(lBinding);

        // Edit the custom binding elements here

        var lEndpoint = new ServiceEndpoint(lContract, lCustomBinding, new EndpointAddress(pServiceHost.BaseAddresses.First()));
于 2012-03-01T08:36:05.257 に答える
1

RoutingServiceクラスを使用して、この問題の別の解決策を見つけました。各コントラクトは引き続き独自の でホストする必要ServiceHostがありますが、RoutingServiceそれらすべての上に座って、統一された「エンドポイント」を介してそれらを提示することができます。それについてのコードプロジェクトの記事も書いています。サンプル コードはBitbucketでも入手できます。

于 2012-02-29T23:46:45.710 に答える
0

探している Net.TCP ポート共有については、こちらを参照してください。

そのためにもサービスを有効にする必要があります。

于 2011-09-30T11:30:04.800 に答える