ProtocolException, вызывающий WCF из WF TransactionScope - PullRequest
1 голос
/ 21 марта 2011

Я получаю исключение 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>

Ответы [ 2 ]

0 голосов
/ 10 августа 2017

Я обновил Сервер и Клиент до .Net4.6.2, и Ошибка волшебным образом исчезла. Ошибка обнаружилась в моей разработке после обновления сервера с .Net 4.0 до 4.5. Я думаю, что большую часть времени это версия .Net, но, конечно, это может быть и проблема с конфигурацией. Мое программное обеспечение работало нормально, прежде чем мне пришлось обновить сервер, потому что DLL была обновлена ​​до .Net 4.5.

GoodLuck

0 голосов
/ 14 июня 2011
...