0

Visual Studio 2010 を使用して、サード パーティが使用する Web アプリケーションでホストされる WCF サービスを開発しました。彼らはそれを呼び出すことができないと私に言っています。テストのために、彼らは私を Altova XmlSpy にリダイレクトし、新しい SOAP リクエストを作成するときに、[SOAP リクエスト パラメーターの変更] メニュー項目で [SOAP+XML (SOAP 1.2) として送信] チェックボックスを選択すると、次の 2 つの警告ダイアログ:

HTTP error: could not POST file ‘/TurniArc/WebServices/Processi.svc’ on server ’10.51.0.108’ (415)

Error sending the soap data to ‘http://10.51.0.108/TurniArc/WebServices/Processi.svc’ HTTP error: could not POST file ‘/TurniArc/WebServices/Processi.svc’ on server ’10.51.0.108’ (415)

私は確かにそれを確認しました。そのオプションのチェックを外すと、リクエストは必要に応じて送信されます。また、社内テストに常に使用していたソフトウェアである soapUI を使用して、Web サービスを呼び出す際に問題が発生したことはありません。

これは私が作成する最初の Web サービスであり、理論的な知識なしで開始します (しかし、誰もが知っていると思います :-) )。問題はバインディングにあるのでしょうか? Add/New Item/WCF Service を使用してサービスを作成し、すべてのデフォルト オプションを残したので、BasicHttpBinding である必要があります。

これは私の web.config の serviceModel 部分です

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
<!--other bindings related to proxies to other services I'm invoking -->
</system.serviceModel>

私のインターフェースには

[ServiceContract(Namespace="http://www.archinet.it/HRSuite/Processi/")]

属性とそれを実装するクラスには

[ServiceBehavior(IncludeExceptionDetailInFaults = true, Namespace = "http://www.archinet.it/HRSuite/Processi/")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

属性

ありがとうございました

編集:サードパーティはOracle SOAミドルウェアを使用しています

4

1 に答える 1

3

BasicHttpBindingは SOAP 1.1 を使用するため、このバインディングを使用して SOAP 1.2 でリクエストをエンドポイントに送信することはできません。HTTP ステータス コード 415 は、SOAP 1.1 が text/xml コンテンツ タイプを使用するのに対し、SOAP 1.2 は application/soap+xml コンテンツ タイプを使用するため、サポートされていないメディア タイプを意味します。

WsHttpBinding に他の WS-* 要素が含まれていない SOAP 1.2 と同等の BasicHttpBinding が必要な場合は、カスタム バインディングを作成する必要があります。最も単純なバージョンは次のようになります。

<bindings>
  <customBinding>
    <binding name="soap12">
      <textMessageEncoding messageVersion="Soap12" />
      <httpTransport />
    </binding>
  </customBinding>
</bindings>

次に、サービスのエンドポイントを手動で定義する必要があります (現時点ではデフォルトのエンドポイントを使用しています)。

<services>
  <service name="YourNamespace.YourServiceClass">
    <endpoint address="" binding="customBinding" bindingConfiguration="soap12" 
              contract="YourNamespace.YourServiceContractInterface" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

とにかく、Oracle SOA ミドルウェアでサービスを利用するために SOAP バージョンを再構成するのに数分以上かかるとは思えません。

于 2011-05-31T11:20:32.770 に答える