ProtocolException从WF TransactionScope调用WCF

时间:2011-03-21 16:34:36

标签: wcf workflow-foundation-4

我收到一个SOAP异常告诉: “来自命名空间'http://schemas.microsoft.com/ws/2006/02/tx/oletx'的标题'OleTxTransaction'未被此邮件的收件人理解,导致邮件无法处理。此错误通常表示此消息的发送方已启用接收方无法处理的通信协议。请确保客户端绑定的配置与服务的绑定一致。“

该方法定义为(默认情况下为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 :(得分:0)

答案 1 :(得分:0)

我将服务器和客户端更新为.Net4.6.2并且错误魔术消失了。 服务器从.Net 4.0更新到4.5后,错误出现在我的开发中。 我认为这大部分时间都是.Net版本,但当然也可以是配置问题。在我必须更新服务器之前,我的软件工作正常,因为DLL已更新为.Net 4.5。

好运