2009-05-25 7 views
0

J'essaie de consommer un service avec une application de console WCF. Mais la seule chose que je reçois en réponse est "Le serveur distant a retourné une réponse inattendue: (400) Mauvaise demande."Erreur d'authentification Windows WCF

Le service est configuré avec les options suivantes:

<services> 
    <service name="TryOut.BasicService" behaviorConfiguration="NicksBasicBehavior"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://192.168.10.67:8000/Service" /> 
     </baseAddresses> 
    </host> 

    <endpoint address ="http://192.168.10.67:8000/Service" 

       name="NicksEndpoint" 
       binding="basicHttpBinding" 
       contract="TryOut.IBasicService" 
       bindingConfiguration="BasicBinding" 
       /> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="NicksBasicBehavior">  
     <serviceMetadata httpGetEnabled="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

<binding name="BasicBinding"> 
    <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows"/> 
    </security> 
</binding> 

Le fichier de configuration de mon client est la suivante:

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="NicksEndpoint" 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="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address="http://192.168.10.67:8000/Service" binding="basicHttpBinding" 
     bindingConfiguration="NicksEndpoint" contract="ServiceReference1.IBasicService" 
     name="NicksEndpoint" /> 
</client> 

Maintenant, tout fonctionne bien quand je commence le client sur le même PC que le service. Mais si je suis essaie d'exécuter le client sur une machine qui n'est pas dans le domaine du PC serveur, je reçois une erreur, même si je fournir les informations de connexion est dans le code client:

c.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("Nick", "password", "mydomain"); 

Quelqu'un a une idée de ce que je fais mal et comment puis-je le réparer? Merci d'avance!

Répondre

0

Selon cette article on MSDN, il semble que si vous avez besoin de spécifier vos informations d'identification différemment:

WCFTestService.Service myService = new WCFTestService.Service(); 
myService.Credentials = System.Net.CredentialCache.DefaultCredentials; 
MessageBox.Show(myService.GetData(123, true)); 
myService.Dispose(); 

Pourriez-vous essayer d'utiliser ce code et essayer de passer les informations d'identification Windows dans myService.Credentials? Est-ce que ça marche?

Marc

0

avez-vous essayé specifing l'userPrincipalName dans l'élément d'identité sur votre terminal de clients?