HTTP 400 Bad Request lors de l'appel de Service WCF Opération?

Quand je l'appelle http://localhost/TestService.svc/GetColors, je reçois un Http (400) Bad Request. Lorsque je l'exécute dans un violon, je reçois aussi des Mauvaises Demande. Quand j'ai appeler le service par le client test wcf, il fonctionne très bien. Ce qui a pu provoquer cela?

Contrat de Service:

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    string GetColors();
}

Mise en œuvre de ITestService:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class TestService : ITestService
{
    public List<Color> GetColors()
    {
        List<Color> colors= new List<Color>();

        colors.Add(new Color { Name = "Red", Code = "123" });
        colors.Add(new Color { Name = "Blue", Code = "323" });
        colors.Add(new Color { Name = "Green", Code = "3394" });

       return colors;
    }
}

Voici mon site web.config:

<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="CustomAuthentication">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
<services>
<service name="TestService.TestService"
behaviorConfiguration="CustomValidator" >
<endpoint 
address="" 
binding="wsHttpBinding" 
bindingConfiguration="CustomAuthentication"
contract="TestService.ITestService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint 
address="mex" 
binding="mexHttpBinding" 
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/TestService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CustomValidator">
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="TestService.CustomUserNameValidator, TestService"/>
<serviceCertificate findValue="Test" storeLocation="LocalMachine" 
storeName="My" x509FindType="FindBySubjectName"/>
</serviceCredentials>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

Quand je l'appelle, je viens d'ouvrir un navigateur et de mettre l'url http://localhost/TestService.svc/GetColors. Si je le fais par le biais de l'environnement de dev, je vois le Http 400 bad request. Si je le fais par le biais de IIS, je viens de voir une page blanche.

Ici est la InnerException:

<ExceptionString>System.Xml.XmlException: The body of the message cannot be read  
because it is empty.</ExceptionString>

Une autre question concernant mon CustomUserNameValidation:

Je suis la mise en œuvre de Validation Personnalisée par le biais de la Méthode de validation de UserNamePasswordValidator, mais quand je l'appelle quelque chose comme GetColors par la wcf client, il n'invoque pas la validation de la méthode. La seule façon que je peux le faire pour Invoquer valider est que si je Valider(user,pass) directement dans GetColors. J'ai pensé qu'il woulld est appelée automatiquement à chaque appel de service si vous l'avez configuré correctement dans le web.config.

  • Je mettrai à jour mon post.
InformationsquelleAutor Xaisoft | 2011-05-13