我正在使用 aChannelFactory
通过发送原始肥皂请求与外部服务进行通信。我有一个使用IDuplexSessionChannel
. 我尝试创建一个IRequestChannel/IRequestSessionChannel
using binding.BuildChannelFactory<T>()
,但这不起作用(抛出异常)。从我在线阅读的内容来看,双工通道可以像请求通道一样使用,您可以在其中调用服务方法并立即获得响应。我想知道下面的代码是否实现了这一点。ChannelFactory
我到处搜索以查看and的示例IDuplexSessionChannel
,但找不到任何东西。最后,如果这是一个 IDuplexChannel 而不是 IDuplexSessionChannel,那么实现会有什么不同,因为一个是会话的,另一个不是?
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>