2

大きな問題があります。分散トランザクションで動作する Web サービスを作成しようとしています。
以下のコードはすべて、Web サービス (クライアントから呼び出される Web サービス) のサーバー側にあります。
私は自分のインターフェースでこれを書きました:

[ServiceContract]
public interface IClientOperations
{

    [OperationContract]
    [ServiceKnownType(typeof(TriggerExecInput))]
    [ServiceKnownType(typeof(TriggerExecOutput))]
    [TransactionFlow(TransactionFlowOption.Mandatory)]
    TriggerExecOutput TriggeredProfileDataUpdate(TriggerExecInput triggerInputData, bool isST3StatusActive);

そしてこれはweb.configファイルにあります:

<services>
  <service name="ClientOperationsService" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" 
              bindingConfiguration="wsHttpBinding_Common" contract="SL.STAdmin.Applications.WebAPI.IClientOperations"/>
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding_Common" transactionFlow="true">
    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

.svc ファイルを右クリックして [ブラウザーで表示] をクリックすると、次のエラーが表示されます。

Exception Details: System.InvalidOperationException: At least one operation on the 'ClientOperations' 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.

トランザクションを使用しない他の .svc ファイルがあります。それらはすべてうまく機能します。他のバインディング タイプを使用するように指示したときに、まだ BasicHttpTransaction を使用しようとする理由がわかりません。

誰かが私が間違っていることを知っていますか? 前もって感謝します。

4

2 に答える 2

0

<system.serviceModel>これをweb.config の要素内に追加します。

<protocolMapping>
  <add scheme="http" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_Common"/>
</protocolMapping>
于 2012-11-14T01:54:22.007 に答える