2010-05-25 3 views
7

J'ai essayé de porter un service Web WSE 3 hérité vers WCF. Puisque le but est de maintenir une compatibilité descendante avec les clients de WSE 3, j'ai suivi les conseils de article. Après beaucoup d'essais et d'erreurs, je peux appeler le service WCF à partir de mon client WSE 3. Toutefois, je ne peux pas ajouter ou mettre à jour une référence Web à ce service à partir de Visual Studio 2005 (avec WSE 3 installé). La réponse est "La requête a échoué avec le statut HTTP 400: Bad Request". J'ai la même erreur en essayant de générer le proxy en utilisant l'utilitaire wsewsdl3. Je peux ajouter une référence de service en utilisant VS 2008.HTTP 400 Erreur de demande incorrecte lors de la tentative d'ajout de référence Web au service WCF

J'ai essayé d'héberger le service dans IIS 7.5 sur Windows 7 et Windows 2008 Server R2 avec le même résultat. Des solutions ou des suggestions de dépannage?

Voici les sections pertinentes du fichier config pour mon service 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> 

MISE À JOUR: Après avoir essayé la suggestion de Paul traçage, j'ai déterminé que l'exception est System.Xml.XmlException: Le corps du message ne peut pas être lu car il est vide

Malheureusement, cela ne semble pas être d'une grande aide. Une autre chose que j'ai remarquée était qu'il y avait un attribut distinct httpsGetEnabled de l'élément serviceMetadata. J'ai ajouté cela et le mettre à vrai puisque c'est un service de https, mais le résultat était le même. Il semble que pour une raison quelconque, WCF ne reconnaît pas qu'il s'agit d'une demande de métadonnées.

+0

lorsque vous tapez l'URL wsdl dans IE le voyez-vous?Si vous ajoutez une référence de VS 2010, cela fonctionne-t-il? –

Répondre

2

Vous pouvez essayer d'activer le suivi WCF sur le serveur. Insérer cette avant la ligne </system.serviceModel>:

<diagnostics> 

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

</diagnostics> 

Insérer cette après la ligne </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> 

Une fois que vous dupliquez l'erreur, démarrez le WCF tracing tool et ouvrez le fichier journal. Il y a probablement une exception qui se produit.

- EDIT -

Eh bien, c'est un message d'erreur intéressante. Elle conduit à plus de résultats Google:

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