54

WCF サービスを WCFTestClient に追加しようとすると、以下のエラーが発生します。私はウェブ上でいくつかの解決策を試しましたが、うまくいきませんでした。

誰かが問題について私を助けることができますか? サービス用の構成ファイルも提供しています。

コンテンツ タイプ application/soap+xml; charset=utf-8 はサービスでサポートされていませんでした クライアントとサービスのバインディングが一致していない可能性があります。リモート サーバーがエラーを返しました: (415) コンテンツ タイプが 'application/soap+xml; であるため、メッセージを処理できません。charset=utf-8' は予期されたタイプの 'text/xml ではありませんでした。文字セット=utf-8

コード:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file 
  must be added to the host's app.config file. System.Configuration does not 
  support config files for libraries. -->
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttp" allowCookies="true"
                 maxReceivedMessageSize="20000000"
                 maxBufferSize="20000000"
                 maxBufferPoolSize="20000000">
          <readerQuotas maxDepth="32"
               maxArrayLength="200000000"
               maxStringContentLength="200000000"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
     <service name="WCFTradeLibrary.TradeService">
        <endpoint address="" binding="basicHttpBinding"
            bindingConfiguration="basicHttp"
            contract="WCFTradeLibrary.ITradeService">          
         </endpoint>
     </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 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 faul`enter code here`ts for 
          debugging purposes,  
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception info`enter code here`rmation -->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>
4

17 に答える 17

15

ネーミングの問題に遭遇しました。サービス名は、実装の正確な名前である必要があります。一致しない場合は、デフォルトで使用されbasicHttpBindingtext/xmlコンテンツ タイプになります。

クラスの名前は、SVC マークアップと CS ファイルの 2 つの場所にあります。

エンドポイント コントラクトも確認してください。これもインターフェイスの正確な名前であり、それ以上のことはありません。そこに存在できないアセンブリ名を追加しました。

<service name="MyNamespace.MyService">
    <endpoint address="" binding="wsHttpBinding" contract="MyNamespace.IMyService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
于 2014-08-14T07:58:18.323 に答える
8

これは、私の問題を解決する web.config の例です。< binding name="TransportSecurity" messageEncoding="Text" textEncoding="utf-8">に注意してください

于 2013-12-28T15:03:23.423 に答える
6

私の場合、クラスの 1 つにデフォルトのコンストラクターがありませんでした。また、デフォルトのコンストラクターのないクラスはシリアル化できません。

于 2014-02-06T06:45:43.457 に答える
1

このエラーは、クライアントが転送に を使用しWCFてメッセージを送信しようとした場合に発生する可能性がありますが、サービスは通常の SOAP メッセージしか理解できません (MIME 部分は含まれず、HTTP 要求の text/xml タイプのみ)。MTOM extension (MIME type application/soap+xmlSOAP XML in MTOM

正しい に対してクライアント コードを生成したことを確認してくださいWSDL

サーバー側で MTOM を使用するには、構成ファイルを変更してmessageEncoding属性を追加します。

<binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000"
             messageEncoding="Mtom" >
于 2014-04-23T10:21:00.040 に答える
1

私の場合は別の解決策がありました。クライアントはbasichttpsbinding [1] を使用し、サービスは wshttpbinding を使用していました。

サーバーバインディングをbasichttpsbindingに変更することで問題を解決しました。また、次を追加して、ターゲット フレームワークを 4.5 に設定する必要がありました。

  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>

[1] 通信は https 経由でした。

于 2014-09-15T17:12:42.383 に答える
0

同じエラー メッセージが表示されました。私はそれを修正することができました:

私の場合、エラーは、返されたクラスの親クラスに [datacontract] および [datamember] 属性がなかったことです。エラー メッセージは誤解を招くものでした。

[OperationContract]
List<MyClass> GetData();

[DataContract]
public class MyClass : MyParentClass
{       
    [DataMember]
    public string SomeString { get; set; }      
}

// Missing DataContract
public class MyParentClass
{
    // Missing DataMember
    public int SomeNumber { get; set; }

}
于 2015-06-01T09:44:44.990 に答える
0

WebServiceTemplate spring ws [err] org.springframework.ws.client.WebServiceTransportException: Cannot process the message because the content type 'text/xml; を使用しているときに同じエラーが発生しました。charset=utf-8' は、予期されたタイプ 'application/soap+xml;' ではありませんでした。charset=utf-8'. [415] [err] at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:665). 私が使用していたWSDLにはsoap1.2プロトコルがあり、デフォルトではプロトコルはsoap1.1です。以下のコードを使用してプロトコルを変更したところ、機能していました

 MessageFactory msgFactory = MessageFactory.newInstance(javax.xml.soap.SOAPConstants.SOAP_1_2_PROTOCOL);
     SaajSoapMessageFactory saajSoapMessageFactory = new SaajSoapMessageFactory(msgFactory);
     saajSoapMessageFactory.setSoapVersion(SoapVersion.SOAP_12);
     getWebServiceTemplate().setMessageFactory(saajSoapMessageFactory);
于 2019-06-28T20:48:50.273 に答える
0

私も同じ問題に遭遇しました。私の場合は、Mtom で transfermode=streaming を使用していました。結局のところ、私は自分の変数 (構造体用) の 1 つに「HEADER」という名前を付けていました。これは、http サービス ダウンロードの一部であるメッセージ要素 [ http://tempuri.org/:HEADER]と競合していました。明らかに、「予約済み」の単語をパラメーター名として使用することは避ける必要があります。

于 2020-02-03T23:42:33.197 に答える
0

私の場合、欠落が原因で同じエラーが発生しました

[DataContract]
...
[DataMember] 

返されたデータ型の属性。

それを確認し、それらを追加してみて、役立つかどうかを確認してください。

于 2013-07-24T14:09:38.200 に答える
-4

バインディング セクションの web.config に識別されたクライアント構成ファイルを確認します。

于 2013-12-12T12:45:19.587 に答える