ProtocolException从WF TransactionScope调用WCF

ProtocolException从WF TransactionScope调用WCF,wcf,workflow-foundation-4,Wcf,Workflow Foundation 4,我得到一个SOAP异常,告诉我: “命名空间中的标头'OleTxTransaction'http://schemas.microsoft.com/ws/2006/02/tx/oletx'未被此邮件的收件人理解,导致邮件无法处理。此错误通常表示此邮件的发件人启用了收件人无法处理的通信协议。请确保客户端绑定的配置与服务的绑定一致。” 该方法定义为(默认情况下具有TransactionFlowOption.NotAllowed): 同一服务中的其他方法定义如下: [OperationContract]

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

该方法定义为(默认情况下具有TransactionFlowOption.NotAllowed):

同一服务中的其他方法定义如下:

[OperationContract]  
[TransactionFlowOption.Allowed]  
Foo GetFooTransactional(int fooId);
第一个异常在WF TransactionScope活动中调用时抛出,但在使用TransactionScope从常规控制台应用程序调用时不会抛出

第二种方法在任何情况下都有效。我可以在每个方法中都允许事务,但出于几个原因,我不想这样做

我使用命名管道绑定,允许客户端和服务器中的事务流。 服务器:


客户:

<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>

我将服务器和客户端更新为.Net4.6.2,并消除了错误magicaly。 在服务器从.Net 4.0更新到4.5之后,我的开发中出现了这个错误。 我认为这大多数时候是一个.Net版本,当然也可能是一个配置问题。在我必须更新服务器之前,我的软件运行良好,因为DLL已更新到.NET4.5


GoodLuck

我也尝试刷新引用并更改TransactionScope的隔离级别,但仍然得到相同的异常。看起来无论契约说什么,如果我使用wsHttpBinding协议,WF activity总是希望调用事务性方法(调用从未到达服务,这意味着框架拒绝它,因为它不理解头),我还收到一个错误:此邮件的收件人未理解命名空间“”中的标头“CoordinationContext”,导致无法处理该邮件。此错误通常表示此消息的发送方启用了接收方无法处理的通信协议。请确保客户端绑定的配置与服务绑定一致。在文章正文中包含附加信息通常是一种好的形式。由于它是死链接,没有进一步的信息供任何人在搜索中使用。
<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>