web-dev-qa-db-ja.com

WCFとSOAP 1.1

サードパーティがうまく利用できるサービスを作成しようとしています。
コンシューマはSOAP 1.1と互換性があるため、サーバーにbasicHttpBindingを使用しています。実際のリクエストが行われると、予期されるコンテンツタイプで問題が発生するようですbasicHttpBindingを使用すると、なぜサーバーが「application/soap + xml」を期待しているのかわかりません。私の知る限り、これはSOAP 1.2。

私はwiresharkを使用して、これら2つが何について通信しているかを正確に把握しました。以下のtcpストリームと設定を参照してください。

どんな助けでもありがたいです。

サードパーティアプリのリクエスト

POST/HTTP/1.1

SOAPAction: http://tempuri.org/ITestService/Hello

Content-Type:text/xml; charset = utf-8

ホスト:shdesktop:8000

コンテンツの長さ:297

予想:100継続

接続:閉じる

WCFサーバー応答

HTTP/1.1 415コンテンツタイプ 'text/xml;のため、メッセージを処理できません。 charset = utf-8 'は予期されたタイプ' application/soap + xml;ではありませんでした。 charset = utf-8 '。

コンテンツの長さ:0

サーバー:Microsoft-HTTPAPI/2.0

日付:2010年2月9日火曜日14:03:19 GMT

接続:閉じる

サービス構成

<system.serviceModel>
    <services>
      <service behaviorConfiguration="behTestService" name="ConsoleApplication1.TestService">
        <endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint address="TestService" binding="basicHttpBinding"
            contract="ConsoleApplication1.ITestService" />
        <Host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000" />
          </baseAddresses>
        </Host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behTestService">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
26
Silas Hansen

basicHttpBindingはSOAP 1.1を使用しますが、その場合、コンテンツタイプはapplication/soap+xmlになります。

クライアントがtext/xmlを送信しているため、RESTインターフェースを期待している可能性はありますか?これは、WCF webHttpBindingによって処理されます。

MSDN WCF RESTデベロッパーセンター でWCFのRESTの詳細を読み、Pluralsight スクリーンキャストを確認してくださいWCF REST のシリーズ-強くお勧めします!

19
marc_s

一般に、次のテキストを含むWebサービスでメッセージ/エラーが発生した場合:

content type 'text/xml'

これは、Webサーバーが予期したxml応答の代わりにエラーページを返したことを意味します。

7
Shiraz Bhaiji

私はまったく同じ問題を抱えていました-定義はそれが石鹸1.2であると述べていましたが、コンテンツタイプが異なっていたので1.1を期待していました。

サーバー構成を次のように調整した場合:

...
<endpoint address="" .../>
    <Host>
        <baseAddresses>
            <add baseAddress="http://localhost:8001/services/fooService" />
        </baseAddresses>
    </Host>
...

に:

...
<endpoint address="fooService" .../>
    <Host>
        <baseAddresses>
            <add baseAddress="http://localhost:8001/services" />
        </baseAddresses>
    </Host>
...

今回、wsdlはそれをSoap 1.1として公開しました。

3
Julian