Inhaltstyp text / xml; charset = utf-8 wurde vom Dienst nicht unterstützt

74

Ich habe ein Problem mit einem WCF-Dienst. Ich habe eine Konsolenanwendung und muss den Dienst ohne Verwendung von app.config nutzen, daher musste ich den Endpunkt usw. per Code festlegen. Ich habe einen Dienstverweis auf den SVC, kann aber die app.config nicht verwenden. Hier ist mein Code:

BasicHttpBinding binding = new BasicHttpBinding();

EndpointAddress address = new EndpointAddress("http://localhost:8731/WcfServicio/MiServicio");

MiServicioClient svc = new MiServicioClient(binding, address);
object ob = svc.PaisesObtener();

In der letzten Zeile svc.PaisesObtener()erhalte ich die Fehlermeldung:

Content Type text/xml; charset=utf-8 was not supported by service
http://localhost:8731/WcfServicio/MiServicio.  The client and service bindings may be mismatched.
user1055483
quelle

Antworten:

150

Der erste Google-Treffer sagt:

Dies ist normalerweise eine Nichtübereinstimmung in den Client / Server-Bindungen, bei denen die Nachrichtenversion im Dienst SOAP 1.2 verwendet (das Anwendung / Seife + XML erwartet) und die Version im Client SOAP 1.1 verwendet (das Text / XML sendet). WSHttpBinding verwendet SOAP 1.2, BasicHttpBinding verwendet SOAP 1.1.

Es scheint normalerweise eine wsHttpBinding auf der einen Seite und eine basicHttpBinding auf der anderen Seite zu sein.

CodeCaster
quelle
Ich habe das gleiche Problem. Meine web.config listet zwei Endpunkte auf, den ersten address="basic" binding="basicHttpBinding"und den zweiten address="secure" binding="basicHttpsBinding". Wenn ich jedoch versuche, die Dienstreferenz in Visual Studio hinzuzufügen, wird der Fehler angezeigt .
PedroC88
2
@ PedroC88 davon kann ich nicht sagen, was los ist. Bitte versuchen Sie, Ihre eigene Frage zu öffnen, zeigen Sie jedoch alle relevanten Konfigurationen und Schritte an, die Sie versucht haben, z. B. ob Sie die URL des Dienstes über einen Browser aufrufen können und ob die Datei WcfTestClient.exe auf den Dienst zugreifen kann.
CodeCaster
Für mich hatte ich den Link des Pfades zu meinem Metadaten-Endpunkt anstatt zu meiner grundlegenden http-Bindung kopiert, als ich diesen Fehler bekam
Yves Rochon
17
Dieser Beitrag ist jetzt der erste Google-Hit :-D
Andy
Außerdem kann dieser Fehler auftreten, wenn Ihr vollständiger Dienstname und der Name des Dienstabschnitts nicht übereinstimmen. Überprüfen Sie, ob <service name = "ServiceNamespace.ServiceClassName">
Fragment
25

Vergessen Sie nicht, auch den Bindungscode zu überprüfen. Also, wenn Sie geschrieben haben:

BasicHttpBinding binding = new BasicHttpBinding();

Stellen Sie sicher, dass alle Ihre app.configDateien enthalten

<endpoint address="..."
          binding="basicHttpBinding" ...

nicht der

<endpoint address="..."
          binding="wsHttpBinding" ...

oder so.

mykola.rykov
quelle
8

Ich habe dieses Verhalten heute gesehen, als die

   <service name="A.B.C.D" behaviorConfiguration="returnFaults">
        <endpoint contract="A.B.C.ID" binding="basicHttpBinding" address=""/>
    </service>

fehlte in der web.config. Die service.svcAkte war da und wurde bedient. Es dauerte eine Weile, bis klar wurde, dass das Problem nicht in der Bindungskonfiguration selbst lag ...

rene
quelle
3

Ich habe dieses Problem heute gesehen, als ich versucht habe, einen WCF-Service-Proxy zu erstellen, sowohl mit VS2010 als auch mit svcutil.

Alles was ich mache ist mit basicHttpBinding(also kein Problem mitwsHttpBinding ).

Zum ersten Mal in meiner Erinnerung stellte mir MSDN die Lösung unter folgendem Link zur Verfügung: Gewusst wie: Veröffentlichen von Metadaten für einen Dienst mithilfe einer Konfigurationsdatei . Die Zeile, die ich ändern musste, befand sich innerhalb des Verhaltenselements innerhalb des MEX-Dienstverhaltenselements in meiner Datei service app.config. Ich habe es geändert von

&lt;serviceMetadata httpGetEnabled="true"/>  
to  
&lt;serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>

und wie durch Zauberei verschwand der Fehler und ich konnte den Service-Proxy erstellen. Beachten Sie, dass es einen entsprechenden MSDN-Eintrag für die Verwendung von Code anstelle einer Konfigurationsdatei gibt: Gewusst wie: Veröffentlichen von Metadaten für einen Dienst mithilfe von Code.

(Natürlich Policy15 - wie hätte ich das möglicherweise übersehen können ???)

Noch ein "Gotcha": Mein Service muss 3 verschiedene Endpunkte verfügbar machen, von denen jeder einen anderen Vertrag unterstützt. Für jeden Proxy, den ich erstellen musste, musste ich die anderen 2 Endpunkte auskommentieren, andernfalls würde sich svcutil beschweren, dass die Basis-URL-Adresse nicht aufgelöst werden konnte.

D. Diamant
quelle
1

Bei der Verwendung der Channel Factory war ich mit einem ähnlichen Problem konfrontiert. Es war tatsächlich auf einen falschen Vertrag zurückzuführen, der im Endpunkt angegeben wurde.

Sumit Agrawal
quelle
1

Für alle, die hier landen, indem sie suchen:

Inhaltstyp 'application / json; charset = utf-8 'war nicht der erwartete Typ' text / xml; Zeichensatz = utf-8

oder eine Teilmenge dieses Fehlers:

Ein ähnlicher Fehler wurde in meinem Fall durch das Erstellen und Ausführen eines Dienstes ohne geeignete Attribute verursacht. Ich habe diese Fehlermeldung erhalten, als ich versucht habe, die Dienstreferenz in meiner Clientanwendung zu aktualisieren. Es wurde behoben, als ich meine benutzerdefinierten Klassen korrekt angewendet [DataContract]und [DataMember]Attribute zugewiesen habe.

Dies ist höchstwahrscheinlich der Fall, wenn Ihr Dienst eingerichtet wurde und funktioniert und dann nach der Bearbeitung unterbrochen wurde.

Corey
quelle
Genau das ist mir passiert, nachdem ich allen neuen DTOs die richtigen Attribute hinzugefügt habe, hat es sofort funktioniert
The General
0

Ich hatte in letzter Zeit auch das gleiche Problem. Nachdem sie ein paar Stunden gekämpft hatten, kam schließlich eine Lösung heraus

Factory="System.ServiceModel.Activation.WebServiceHostFactory"
to your SVC markup file. e.g.
ServiceHost Language="C#" Debug="true" Service="QuiznetOnline.Web.UI.WebServices.LogService" 
Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

Jetzt können Sie Ihre Anwendung erfolgreich kompilieren und ausführen.

Anver Sadat
quelle
0

Ich betone erneut, dass Namespace, SVC-Name und Vertrag in der Datei web.config korrekt angegeben werden müssen:

 <service name="NAMESPACE.SvcFileName">
    <endpoint contract="NAMESPACE.IContractName" />
  </service>

Beispiel:

<service name="MyNameSpace.FileService">
<endpoint contract="MyNameSpace.IFileService" />
</service>

(Nicht relevante Tags in diesen Beispielen weggelassen)

alexkovelsky
quelle
0

In meinem Fall musste ich in der app.config der Client-Anwendung die NachrichtEncoding für Mtom wie folgt angeben :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="IntegrationServiceSoap" messageEncoding="Mtom"/>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:29495/IntegrationService.asmx"
                binding="basicHttpBinding" bindingConfiguration="IntegrationServiceSoap"
                contract="IntegrationService.IntegrationServiceSoap" name="IntegrationServiceSoap" />
        </client>
    </system.serviceModel>
</configuration>

Sowohl mein Client als auch mein Server verwenden basicHttpBinding. Ich hoffe das hilft den anderen :)

Empfange Yildiz
quelle
0

Ich hatte diesen Fehler und alle oben genannten Konfigurationen waren korrekt, aber ich bekam immer noch den Fehler " Die Client- und Service-Bindungen stimmen möglicherweise nicht überein ".

Was meinen Fehler behoben hat, war das Abgleichen der Attributwerte messageEncoding in den folgenden Knoten von Service- und Client-Konfigurationsdateien. Sie waren anders in meinem, Service war Text und Kunde Mtom . Das Problem wurde behoben, indem der Dienst auf Mtom geändert wurde, um ihn an den Kunden anzupassen.

<configuration>
  <system.serviceModel>
      <bindings>
           <basicHttpBinding>
              <binding name="BasicHttpBinding_IMySevice" ... messageEncoding="Mtom">
              ...
              </binding>
           </basicHttpBinding>
      </bindings>
  </system.serviceModel>
</configuration>
Südsonne
quelle