Visual Studio 2010 Express中的WCF中的TransactionFlow

时间:2011-06-21 22:03:50

标签: wcf visual-studio-2010 visual-web-developer

我正在尝试使用免费的Microsoft Visual Web Developer 2010 Express开始使用WCF中的事务。它为我提供了创建“WCF服务应用程序”的选项,但它似乎没有给我很多选项来托管它或配置不同的绑定。如果我F5项目我得到错误:

At least one operation on the 'Service' contract is configured with the TransactionFlowAttribute attribute set to Mandatory but the channel's binding 'BasicHttpBinding' is not configured with a TransactionFlowBindingElement. The TransactionFlowAttribute attribute set to Mandatory cannot be used without a TransactionFlowBindingElement.

我尝试将*/services/service/endpoint配置添加到web.config中,但它似乎只是被忽略了。我还尝试将默认启动应用程序更改为WcfSvcHost.exe,但此选项显示为灰色。我开始怀疑Express版本的一些失败,但我乐观地认为这只是我的笨蛋。有没有我需要学习的技巧,或者在Visual Studio 2010的完整版本中迸发出来足以让我超越这个障碍并进入下一个障碍?

谢谢!

2 个答案:

答案 0 :(得分:6)

在不知道您的配置和服务合同的情况下,几乎不可能做出有针对性的答案。如果您认为忽略了配置,请确保serviceendpoint/@contract中使用的名称包含CLR名称空间。

WCF 4使用了很好的简化配置,恕我直言使真正的配置比以前更加痛苦。您可以通过将其添加到您的Web配置来切换默认值:

<protocolMapping>
  <remove scheme="http" />
  <add scheme="http" binding="wsHttpBinding" bindingConfiguration="transactionFlowEnabled"/>
</protocolMapping>
<bindings>
  <wsHttpBinding>
    <binding name="transactionFlowEnabled" transactionFlow="true" />
  </wsHttpBinding>
</bindings>

这是一种解决方法,它应该使用定义的绑定作为默认值而不是basicHttpBinding

答案 1 :(得分:1)

感谢Ladislav的建议,我可以通过在Web.config文件中添加以下条目来解决这个问题:

<services>
  <service name="WcfService1.Service1">
    <endpoint
      address=""
      binding="wsHttpBinding"
      contract="WcfService1.IService1"
      />
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding transactionFlow="true"/>
  </wsHttpBinding>
</bindings>