2011-12-26 6 views
14

Sto ospitando un servizio WCF in IIS 7.5 utilizzando .NET 4.0. Ho anche un'applicazione WPF che sto usando come mio client che è stato creato con Visual Studio 2010 e .NET 4.0. Ho aggiunto il mio riferimento al servizio e quando tento di chiamare una funzione, ottengo la seguente eccezioneset di caratteri WCF = utf-8 del messaggio di risposta non corrisponde al tipo di contenuto del bind (application/soap + xml; charset = utf-8)

Il tipo di contenuto application/xml; charset = utf-8 del messaggio di risposta non corrisponde al tipo di contenuto del legame (application/soap + xml; charset = utf-8)

sono in grado di passare al servizio in un browser web e i miei collegamenti sembrano essere gli stessi tra il client e il servizio (collegamenti WsHttp).

So che ci sono molti risultati di google su questo errore ma nessuno di essi sembra essere rilevante/aiutare il mio problema specifico. Ho provato ad installare le funzionalità di attivazione non HTTP e una vasta gamma di altri piccoli trucchi. Qualcuno può essere d'aiuto? Grazie

modificare, qui sono i miei file di configurazione (sono abbastanza lungo)

client

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
     <basicHttpBinding> 
      <binding name="ContentSoap" 
       closeTimeout="00:01:00" openTimeout="00:01:00" 
       receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
       bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" 
           maxArrayLength="2147483647" 
           maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
           realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
      <binding name="OrderSoap" 
       closeTimeout="00:01:00" openTimeout="00:01:00" 
       receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
       bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" 
       maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" 
          maxArrayLength="16384" maxBytesPerRead="4096" 
          maxNameTableCharCount="16384" /> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
           realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
     <netTcpBinding> 
      <binding name="NetTcpBindingEndpoint" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       transactionFlow="false" transferMode="Buffered" 
       transactionProtocol="OleTransactions" 
       hostNameComparisonMode="StrongWildcard" listenBacklog="10" 
       maxBufferPoolSize="2147000000" maxBufferSize="65536" maxConnections="10" 
       maxReceivedMessageSize="2147000000"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" 
        maxArrayLength="2147000000" maxBytesPerRead="4096" 
        maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:01:00" 
           enabled="true" /> 
       <security mode="None"> 
       <transport clientCredentialType="Windows" 
          protectionLevel="EncryptAndSign" /> 
       <message clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </netTcpBinding> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IInmateCanteenServiceWeb" 
       closeTimeout="00:01:00" openTimeout="00:01:00" 
       receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       bypassProxyOnLocal="false" transactionFlow="false" 
       hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
       allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" 
        maxArrayLength="16384" maxBytesPerRead="4096" 
        maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint name="ContentSoap" 
      address="http://media.team.twvending.net/storeservices/content.asmx" 
      binding="basicHttpBinding" bindingConfiguration="ContentSoap" 
      contract="MediaPortContent.ContentSoap" /> 
     <endpoint name="OrderSoap" 
      address="http://media.team.twvending.net/storeservices/order.asmx" 
      binding="basicHttpBinding" bindingConfiguration="OrderSoap" 
      contract="MediaPortOrder.OrderSoap" /> 
     <endpoint name="NetTcpBindingEndpoint" 
      address="..." 
      binding="netTcpBinding" bindingConfiguration="NetTcpBindingEndpoint" 
      contract="WebCallBack.ICallbackService" /> 
     <endpoint name="WSHttpBinding_IInmateCanteenServiceWeb" 
      address="..." 
      binding="wsHttpBinding" 
      bindingConfiguration="WSHttpBinding_IInmateCanteenServiceWeb" 
      contract="InmateCanteenWeb.IInmateCanteenServiceWeb" /> 
     <endpoint name="WSHttpBinding_ICommAccountingBinding" 
      address="..." 
      binding="wsHttpBinding" 
      bindingConfiguration="WSHttpBinding_IInmateCanteenServiceWeb" 
      contract="CommAccountingWeb.ICommAccountingWeb" /> 
    </client> 
</system.serviceModel> 

e Server

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="httpBehavior"> 
       <!--<webHttp />--> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       <serviceCredentials> 
        <clientCertificate> 
        <authentication revocationMode="NoCheck" /> 
        </clientCertificate> 
        <serviceCertificate findValue="CN=secure.inmatecanteen.com" /> 
       </serviceCredentials> 
       <serviceMetadata httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
      <behavior name="MexBehavior"> 
       <serviceMetadata httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
      <behavior name="HttpMexBehavior"> 
       <serviceMetadata httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
      <behavior name="BasicHttpMexBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
      <behavior name=""> 
       <serviceMetadata httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
     </behaviors> 
     <serviceHostingEnvironment aspNetCompatibilityEnabled="false" 
           multipleSiteBindingsEnabled="true" /> 
     <bindings> 
     <wsHttpBinding> 
      <binding name="myWsHttpBinding" maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" messageEncoding="Text"> 
       <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="None" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
     <webHttpBinding> 
      <binding name="myWebHttpBinding"> 
       <security mode="Transport"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
       </security> 
      </binding> 
     </webHttpBinding> 
     <basicHttpBinding> 
      <binding name="myBasicHttpBinding" maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647"> 
       <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <services> 
     <service name="CommAccountingWeb.CommAccountingWeb" 
        behaviorConfiguration="HttpMexBehavior"> 
      <endpoint 
       address="" 
       behaviorConfiguration="httpBehavior" 
       binding="webHttpBinding" bindingConfiguration="myWebHttpBinding" 
       contract="CommAccountingWeb.ICommAccountingWeb" /> 
      <endpoint 
       address="mex" 
       binding="mexHttpsBinding" 
       contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="..."></add> 
       </baseAddresses> 
      </host> 
     </service> 
     <service name="CommAccountingWeb.CommAccountingBasic" 
        behaviorConfiguration="BasicHttpMexBehavior"> 
      <endpoint 
       address="" 
       binding="basicHttpBinding" 
       bindingConfiguration="myBasicHttpBinding" 
       contract="CommAccountingWeb.ICommAccountingBasic" /> 
      <endpoint 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="..." /> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 
</system.serviceModel> 
+0

Sembra che il servizio sia configurato per 'webHttpBinding' e quindi restituisca solo XML, mentre il client si aspetta un messaggio XML SOAP .... Puoi mostrarci configurazioni server e client? –

+0

Vedere la mia modifica .... – tier1

+0

OK grazie per la modifica - ma ci sono così tanti endpoint e client di servizio che si collegano - ** quali ** stai usando che causano questo problema ?? Come appare il tuo codice lato client, che stai cercando di usare per chiamare una di quelle funzioni ?? –

risposta

18

Come sospettavo - propria configurazione lato client sembra che questo :

<endpoint name="WSHttpBinding_ICommAccountingBinding" 
     address="https://secure.inmatecanteen.com/CommAccountingService/CommAccountingWeb.svc" 
     binding="wsHttpBinding" 
     bindingConfiguration="WSHttpBinding_IInmateCanteenServiceWeb" 
     contract="CommAccountingWeb.ICommAccountingWeb" /> 

Si aspetta wsHttpBinding - ma l'indirizzo sul lato server si connette a è:

<service name="CommAccountingWeb.CommAccountingWeb" 
      behaviorConfiguration="HttpMexBehavior"> 
    <endpoint 
     address="" 
     behaviorConfiguration="httpBehavior" 
     binding="webHttpBinding" bindingConfiguration="myWebHttpBinding" 
     contract="CommAccountingWeb.ICommAccountingWeb" /> 
    <host> 
     <baseAddresses> 
      <add baseAddress="https://secure.inmatecanteen.com/CommAccountingService/CommAccountingWeb.svc"></add> 
     </baseAddresses> 
    </host> 
</service> 

e questo server endpoint utilizza webHttpBinding.

Così, mentre il cliente si aspetta un SOAP messaggio XML (tipo di contenuto: application/soap+xml; charset=utf-8), l'endpoint lato server è un REST endpoint che restituisce (tipo di contenuto: application/xml; charset=utf-8) XML pianura

Soluzione: si è necessario assicurarsi che sia il client e l'endpoint del server utilizzato siano sincronizzati per quanto riguarda i collegamenti e la configurazione!

0

Ho riscontrato questo problema dopo aver aggiunto un metodo che restituiva una raccolta di istanze di una classe base che non disponeva di un attributo [KnownType] che avrebbe risolto in un'istanza concreta. Con l'attributo [KnownType] in posizione il problema è scomparso.

[ServiceContract] 
public interface IService { 
    [OperationContract] 
    IEnumerable<ItemBase> GetItems(); 
} 

[DataContract] 
// [KnownType(typeof(RealItemA))] <--- without these attributes you will get a problem 
// [KnownType(typeof(RealItemB))] 
public class ItemBase { 
} 

[DataContract] 
public class RealItemA : ItemBase { 
} 

[DataContract] 
public class RealItemB : ITemBase { 
} 
0

nel mio caso lo stesso errore è stato causato dalla mancanza

[datacontract] 
[datamember] 

attributi in restituita tipo di dati.

Il messaggio di errore era davvero fuorviante.

3

Mi sono imbattuto in un errore simile durante la creazione di un servizio client a uno dei servizi Web lato server esistenti. Potrei correggerlo usando il protocollo di trasporto SOAP 1.1 sul client. In qualche modo soap 1.2 sta dando/aspettandosi un formato diverso. Questa traccia torna alla differenza tra BasicHttpBinding vs WebHttpBinding vs WsHttpBinding.

3

Come uno dei commenti dice in this question, Aggiungi ?wsdl all'indirizzo del tuo endpoint del tuo cliente e dovresti avere più fortuna con il servizio. ?wsdl è importante: significa che il browser sta ricevendo semplicemente "Lingua di descrizione dei servizi Web" per il servizio e non chiama il servizio.

Ho avuto lo stesso problema e l'aggiunta di ?wsdl ha risolto il mio mal di testa.

0

Accertarsi che non siano state apportate modifiche ai binding, ai contratti e agli endpoint generati in app.config all'aggiunta del riferimento del servizio.

Aggiungi MessageEncoding come Mtom nel codice .NET e quindi verifica se il messaggio è ancora visualizzato.

Ho provato a spiegare la creazione di un consumo di servizio WCF che utilizza il protocollo di sapone sia per wsHttpBinding e BasicHttpBinding e questioni affrontate qui: http://www.writeulearn.com/consume-wcf-soap-service-csharp/ Si prega di passare attraverso di essa.

0

Ho questo errore dovuto a Diversa versione di Syste.Web.MVC DLL. È possibile fare riferimento alla risposta Here in un'altra domanda di overflow dello stack.