TransactionFlow в WCF из Visual Studio 2010 Express - PullRequest
4 голосов
/ 22 июня 2011

Я пытаюсь начать работу с транзакциями в WCF, используя бесплатный Microsoft Visual Web Developer 2010 Express.Это дает мне возможность создать «Приложение-службу 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 ]

6 голосов
/ 22 июня 2011

Не зная вашей конфигурации и контракта на обслуживание, почти невозможно сделать целевой ответ.Если вы считаете, что ваша конфигурация игнорируется, убедитесь, что имена, используемые в service и endpoint/@contract, содержат пространства имен CLR.

WCF 4 использует удобную упрощенную конфигурацию, которая, IMHO, сделала реальную конфигурацию гораздо более сложной, чем раньше.Вы можете переключить настройки по умолчанию, добавив это в свою веб-конфигурацию:

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

Это обходной путь, который должен использовать определенную привязку по умолчанию вместо basicHttpBinding.

1 голос
/ 22 июня 2011

Благодаря предложению Ладислава я смог решить эту проблему, добавив в файл Web.config следующие записи:

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

и:

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