2010-05-25 18 views
7

Ho cercato di effettuare il porting di un servizio Web legacy WSE 3 a WCF. Poiché il mantenimento della retrocompatibilità con i client WSE 3 è l'obiettivo, ho seguito le indicazioni in questo article.Errore HTTP 400 Errore di richiesta che tenta di aggiungere riferimento Web al servizio WCF

Dopo molte prove ed errori, posso chiamare il servizio WCF dal mio client WSE 3. Tuttavia, non sono in grado di aggiungere o aggiornare un riferimento Web a questo servizio da Visual Studio 2005 (con WSE 3 installato). La risposta è "La richiesta non è riuscita con lo stato HTTP 400: Richiesta non valida". Ottengo lo stesso errore cercando di generare il proxy utilizzando l'utilità wsewsdl3. Posso aggiungere un riferimento di servizio utilizzando VS 2008.

Ho provato ad ospitare il servizio in IIS 7.5 su Windows 7 e Windows 2008 Server R2 con lo stesso risultato. Qualche soluzione o suggerimenti per la risoluzione dei problemi?

Qui ci sono le sezioni rilevanti dal file di configurazione per il mio servizio WCF.

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="MyBehavior" 
     name="MyService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="wseBinding" 
      contract="IMyService" /> 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 

    <bindings> 
     <customBinding> 
     <binding name="wseBinding"> 
      <security authenticationMode="UserNameOverTransport" /> 
      <mtomMessageEncoding messageVersion="Soap11WSAddressingAugust2004" /> 
      <httpsTransport/> 
     </binding> 
     </customBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MyBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" 
       customUserNamePasswordValidatorType="MyCustomValidator" /> 
      </serviceCredentials> 
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MyRoleProvider" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    </system.serviceModel> 

UPDATE: Dopo aver provato il suggerimento tracciamento di Paul, ho stabilito che l'eccezione è System.Xml.XmlException: Il corpo del messaggio non può essere letto, perché è vuota

Purtroppo, questo non sembra essere di grande aiuto. Un'altra cosa che ho notato è che c'era un attributo httpsGetEnabled separato dell'elemento serviceMetadata. L'ho aggiunto e impostato su true poiché si tratta di un servizio https, ma il risultato è stato lo stesso. Sembra che per qualche motivo WCF non stia riconoscendo che questa è una richiesta di metadati.

+0

quando digiti l'URL wsdl in IE lo vedi?se aggiungi un riferimento da VS 2010 funziona? –

risposta

2

Si potrebbe provare a abilitare la traccia WCF sul server. Inserire questo prima la linea </system.serviceModel>:

<diagnostics> 

    <messageLogging 
    logEntireMessage="true" 
    logMalformedMessages="true" 
    logMessagesAtServiceLevel="true" 
    logMessagesAtTransportLevel="false" 
    maxMessagesToLog ="3000" /> 

</diagnostics> 

Inserire questo dopo la linea </system.serviceModel>:

<system.diagnostics> 
    <sharedListeners> 
     <add name="sharedListener" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="c:\logs\tracelog.svclog" /> 
    </sharedListeners> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" > 
      <listeners> 
       <add name="sharedListener" /> 
      </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Verbose"> 
      <listeners> 
       <add name="sharedListener" /> 
      </listeners> 
     </source> 
     <source name="ApplicationLogging" switchValue="Information" > 
      <listeners> 
       <add name="sharedListener" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

Dopo di duplicare l'errore, avviare il WCF tracing tool e aprire il file di log. Probabilmente si sta verificando qualche eccezione.

- EDIT -

Beh, questo è un messaggio di errore interessante. Si porta a più risultati di Google:

  1. Another stackoverflow question
  2. Could be fixed in next release of Windows 7
  3. TransferMode.StreamedResponse
Problemi correlati