Я получаю исключение SOAP, сообщающее:
«Заголовок« OleTxTransaction »из пространства имен« http://schemas.microsoft.com/ws/2006/02/tx/oletx' не был понят получателем этого сообщения, из-за чего сообщение не обрабатывается. Эта ошибка обычно указывает, что отправитель этого сообщения включил протокол связи, который получатель не может Пожалуйста, убедитесь, что конфигурация привязки клиента соответствует привязке службы. "
Метод определен как (по умолчанию имеет TransactionFlowOption.NotAllowed):
[OperationContract]
Foo GetFoo(int fooId);
Другой метод в том же сервисе определяется как:
[OperationContract]
[TransactionFlowOption.Allowed]
Foo GetFooTransactional(int fooId);
Первый вызовет исключение при вызове внутри действия WF TransactionScope, но не при вызове его из обычного консольного приложения с TransactionScope.
Второй работает в любом случае. Я мог бы разрешить транзакции в каждом методе, но по нескольким причинам я не хочу этого делать.
Я использую привязки именованных каналов, позволяющие поток транзакций на клиентах и на сервере.
Сервер:
<netNamedPipeBinding>
<binding transactionFlow="true" transactionProtocol="OleTransactions" transferMode="Buffered" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
</netNamedPipeBinding>
Клиент:
<netNamedPipeBinding>
<binding name="DefaultNamedPipeConfig" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="true" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netNamedPipeBinding>