我使用ChannelFactory
通过发送原始soap请求与外部服务进行通信。我有一个使用IDuplexSessionChannel
的NetTcp端点。我尝试使用binding.BuildChannelFactory<T>()
创建一个IRequestChannel/IRequestSessionChannel
,但那不起作用(抛出异常)。从我在线阅读的内容来看,双工频道可以像请求频道一样使用,您可以在其中调用服务方法并获得即时响应。我想知道下面的代码是否可以实现这一点。我到处搜索以查看ChannelFactory
和IDuplexSessionChannel
的示例,但找不到任何内容。最后,如果这是一个IDuplexChannel而不是一个IDuplexSessionChannel,那么这个实现是否会有所不同,因为一个是会话式的,另一个不是?WCF ChannelFactory 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>
你说扔一个例外 - 它扔了什么,在哪里? – Chris
在binding.BuildChannelFactory()处引发。 ArgumentException:此通道管理器不支持指定的通道类型System.ServiceModel.Channels.IRequestChannel。参数名称:TChannel。 –
fbhdev