2010-05-25 33 views
7

He estado tratando de portar un servicio web heredado de WSE 3 a WCF. Como el objetivo es mantener la compatibilidad con clientes WSE 3 hacia atrás, he seguido las instrucciones en este article.HTTP 400 Error de solicitud incorrecta al intentar agregar una referencia web al servicio WCF

Después de mucho ensayo y error, puedo llamar al servicio WCF desde mi cliente WSE 3. Sin embargo, no puedo agregar o actualizar una referencia web a este servicio desde Visual Studio 2005 (con WSE 3 instalado). La respuesta es "La solicitud falló con el estado HTTP 400: Solicitud incorrecta". Recibo el mismo error al intentar generar el proxy usando la utilidad wsewsdl3. Puedo agregar una referencia de servicio usando VS 2008.

He intentado alojar el servicio en IIS 7.5 en Windows 7 y Windows 2008 Server R2 con el mismo resultado. ¿Alguna solución o sugerencia de solución de problemas?

Aquí están las secciones relevantes del archivo de configuración para mi servicio 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> 

ACTUALIZACIÓN: Después de probar la sugerencia trazado de Pablo, he determinado que la excepción es System.Xml.XmlException: El cuerpo del mensaje no se puede leer porque está vacío

Por desgracia, eso no parece ser de mucha ayuda. Otra cosa que noté fue que había un atributo httpsGetEnabled separado del elemento serviceMetadata. Agregué eso y lo configuré en verdadero, ya que este es un servicio https, pero el resultado fue el mismo. Parece que, por algún motivo, WCF no reconoce que se trata de una solicitud de metadatos.

+0

cuando escribe la URL wsdl en IE ¿lo ve?si agrega una referencia de VS 2010, ¿funciona? –

Respuesta

2

Puede intentar habilitar el seguimiento de WCF en el servidor. Insertar este antes la línea </system.serviceModel>:

<diagnostics> 

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

</diagnostics> 

Insertar este después la línea </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> 

Después de duplicar el error, inicie el WCF tracing tool y abrir el archivo de registro. Es probable que se produzca alguna excepción.

- EDITAR -

Bueno, eso es un mensaje de error interesante. Con ello aumentan los resultados de Google:

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