web-dev-qa-db-fra.com

Type de contenu application/soap + xml; charset = utf-8 n'était pas pris en charge par le service

Je reçois une erreur en dessous d'une erreur en essayant d'ajouter un service WCF à WCFTestClient. Je suis passé par nombre de solution sur le Web mais je ne pouvais pas le faire fonctionner. 

Quelqu'un peut-il m'aider avec les problèmes? Je fournis également mon fichier de configuration pour le service:

Type de contenu application/soap + xml; charset = utf-8 n'était pas supporté par service Les liaisons client et service peuvent ne pas correspondre. Le Le serveur distant a renvoyé une erreur: (415) Impossible de traiter le message parce que le type de contenu 'application/soap + xml; charset = utf-8 'n'était pas le type attendu 'text/xml; jeu de caractères = utf-8

Code:

<?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>
41
user2197100

Je rencontre un problème de nommage. Le nom du service doit être exactement le nom de votre implémentation. En cas d'incompatibilité, il utilise par défaut basicHttpBinding, ce qui donne le type de contenu text/xml

Le nom de votre classe est à deux endroits - balisage SVC et fichier CS.

Vérifiez également le contrat du point final - encore une fois, le nom exact de votre interface, rien de plus. J'ai ajouté le nom de l'Assemblée qui ne peut tout simplement pas être là.

<service name="MyNamespace.MyService">
    <endpoint address="" binding="wsHttpBinding" contract="MyNamespace.IMyService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
12
Jan Zahradník

Voici l'exemple d'un web.config qui résout le problème pour moi. Faites attention au <binding name = "TransportSecurity" messageEncoding = "Text" textEncoding = "utf-8">

9
Marcelo Lima Braga

J'ai eu le même problème, je l'ai obtenu en "liant" le service avec le comportement du service en procédant comme suit:

A donné un nom au comportement

<serviceBehaviors>
        <behavior name="YourBehaviourNameHere">

Et en faisant référence à votre comportement à votre service

<services>
  <service name="WCFTradeLibrary.TradeService" behaviorConfiguration="YourBehaviourNameHere">

Le tout serait:

<?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" behaviourConfiguration="YourBehaviourNameHere">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp" contract="WCFTradeLibrary.ITradeService">          
         </endpoint>
     </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="YourBehaviourNameHere">
          <!-- 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
The Pig's Ear

Dans mon cas, l'une des classes n'avait pas de constructeur par défaut - et une classe sans constructeur par défaut ne peut pas être sérialisée.

4
ParPar

Comme d'autres l'ont dit, cela se produit en raison de l'inadéquation du service client.

J'ai rencontré le même problème lorsque le débogage a appris qu'il y avait une incompatibilité dans la liaison. Au lieu de WSHTTPBinding, je parlais de BasicHttpBinding. Dans mon cas, je parle aussi bien de BasicHttp que de WsHttp. J'assignais dynamiquement la liaison en fonction de la référence. Vérifiez donc le constructeur de votre service.

Vérifiez votre constructeur de service une fois . Vérifiez l'image ci-dessous

2
Shreeraj Bhat

Pour moi, il était très difficile d'identifier le problème en raison du grand nombre de méthodes et de classes impliquées.

Ce que j'ai fait est commenté (supprimé) certaines méthodes de l'interface WebService et essayez, puis commentez un autre groupe de méthodes et essayez, j'ai continué à le faire jusqu'à ce que j'ai trouvé la méthode qui pose problème.

Dans mon cas, il utilisait un objet complexe qui ne peut pas être sérialisé.

Bonne chance!

1
Ahmed El-Araby

Mon cas avait une solution différente. Le client utilisait basichttpsbinding [1] et le service utilisait wshttpbinding. 

J'ai résolu le problème en modifiant la liaison du serveur à basichttpsbinding . En outre, je devais définir le cadre cible à 4.5 en ajoutant:

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

[1] la communication était terminée via https.

1
ByteArtisan

Cette erreur peut se produire lorsque le client WCF essaie d'envoyer son message en utilisant MTOM extension (MIME type application/soap+xml pour transférer SOAP XML in MTOM), mais que le service est tout à fait en mesure de comprendre les messages normaux SOAP Requête HTTP).

Assurez-vous que vous avez généré votre code client par rapport à la variable WSDL correcte. 

Pour utiliser MTOM côté serveur, modifiez votre fichier de configuration en ajoutant messageEncoding attribut:

<binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000"
             messageEncoding="Mtom" >
1
Maciej Wróbel

Mon problème était notre propre classe de collection, qui était marquée avec [DataContract]. De mon point de vue, c’était une approche propre et cela fonctionnait bien avec XmlSerializer, mais pour le point de terminaison WCF, elle cassait et nous devions la supprimer. XmlSerializer fonctionne toujours sans.

Ne fonctionne pas

[DataContract]
public class AttributeCollection : List<KeyValuePairSerializable<string, string>>

Travail

public class AttributeCollection : List<KeyValuePairSerializable<string, string>>
0
ynnok

Moi aussi j'ai eu la même erreur dans les journaux de trace. Ma fonction nouvellement créée dans l'API générait la même erreur, mais à ma grande surprise, les anciennes fonctions fonctionnaient bien. Le problème était - Mes membres de données de contrat avaient peu de variables de type objet. soap-xml n'était pas capable de le gérer correctement, cependant, je peux voir que le tableau des types d'objet (objet []) a été passé sans problèmes. Seul un type d'objet simple n'était pas analysé par soap. Cela pourrait être une raison de plus pour laquelle les services jettent l'erreur ci-dessus. 

0
Phantom

Dans mon cas, la même erreur a été causée par un manque 

[DataContract]
...
[DataMember] 

attributs dans le type de données retourné.

Vérifiez cela et essayez de les ajouter et voyez si cela vous aide.

0
Michael Brennt