ChannelFactory
生の石鹸リクエストを送信して外部サービスと通信するためにを使用しています。を使用するNetTcpエンドポイントがありますIDuplexSessionChannel
。IRequestChannel/IRequestSessionChannel
usingを作成しようとしましたbinding.BuildChannelFactory<T>()
が、機能しませんでした(例外をスローしました)。私がオンラインで読んだことから、デュプレックスチャネルはリクエストチャネルのように使用でき、サービスメソッドを呼び出してすぐに応答を得ることができます。以下のコードがそれを達成するかどうか知りたいです。ChannelFactory
との例を見るためにどこでも検索しましIDuplexSessionChannel
たが、何も見つかりませんでした。最後に、これがIDuplexSessionChannelではなくIDuplexChannelである場合、一方はセッションフルで、もう一方はそうではないため、実装は異なりますか?
IChannelFactory factory;
IChannel channel;
Binding binding = GetBindingFromConfig( bindingName );
EndpointAddress address = new EndpointAddress( endpointAddress );
if( binding.CanBuildChannelFactory<IDuplexSessionChannel>() )
{
factory = binding.BuildChannelFactory<IDuplexSessionChannel>();
factory.Open();
channel = ( (IChannelFactory<IDuplexSessionChannel>)factory ).CreateChannel( address );
channel.Open();
( (IDuplexSessionChannel)channel ).Send( requestMessage );
( (IDuplexSessionChannel)channel ).TryReceive( Timespan.MaxValue, out responseMessage );
}
これが私の設定ファイルです:
<netTcpBinding>
<binding
name="xyz"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
transactionFlow="false"
transferMode="Buffered"
transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"
listenBacklog="10"
maxBufferPoolSize="524288"
maxBufferSize="10485760"
maxConnections="10"
maxReceivedMessageSize="10485760">
<readerQuotas
maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="10485760"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession
ordered="true"
inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport" />
</binding>
</netTcpBinding>