Я использую ChannelFactory
для связи с внешними службами путем отправки необработанных мыльных запросов. У меня есть конечная точка NetTcp, которая использует IDuplexSessionChannel
. Я попытался создать IRequestChannel/IRequestSessionChannel
, используя binding.BuildChannelFactory<T>()
, но это не сработало (выбрало исключение). Из того, что я читаю онлайн, дуплексные каналы могут использоваться как каналы запросов, где вы вызываете метод услуги и получаете немедленный ответ. Я хочу знать, выполнит ли этот код ниже. Я искал повсюду, чтобы увидеть пример 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
Броски при перепроверке.BuildChannelFactory(). ArgumentException: указанный тип канала System.ServiceModel.Channels.IRequestChannel не поддерживается этим менеджером каналов. Имя параметра: TChannel. –
fbhdev