2010-10-16 15 views
0

Mon client dispose d'un site Web hébergé sur un serveur Web partagé. Je n'ai pas accès à IIS. J'essaie de déployer un service de données WCF sur son site. Je reçois cette erreur:Erreur IIS hébergeant le service de données WCF sur l'hôte Web partagé

IIS specified authentication schemes 'IntegratedWindowsAuthentication, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used.

J'ai cherché SO et d'autres sites tout à fait un peu mais ne peut pas sembler trouver quelqu'un avec ma situation exacte. Je ne peux pas modifier les paramètres IIS, car il s'agit d'un serveur tiers et d'un serveur Web partagé. Donc, ma seule option est de changer les choses dans le code ou dans la configuration du service. Ma config de service ressemble à ceci:

<system.serviceModel xdt:Transform="Insert"> 
    <serviceHostingEnvironment> 
    <baseAddressPrefixFilters> 
     <add prefix="http://www.somewebsite.com"/> 
    </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    <bindings> 
    <webHttpBinding> 
     <binding name="{Binding Name}" > 
     <security mode="None" /> 
     </binding> 
    </webHttpBinding> 
    </bindings> 
    <services> 
    <service name="{Namespace to Service}"> 
     <endpoint address="" binding="webHttpBinding" bindingConfiguration="{Binding Name}" contract="System.Data.Services.IRequestHandler"> 
     </endpoint> 
    </service> 
    </services> 
</system.serviceModel> 

Comme vous pouvez le voir, j'essayé de régler le mode de sécurité « Aucun », mais cela ne semble pas aider. Que dois-je changer pour résoudre cette erreur?

Répondre

0

Je ne sais pas trop à ce sujet, mais de la lecture this article Je pense que vous ne pouvez pas définir l'authentification à aucun directement à partir de la config.

Les paramètres d'authentification Windows sont définis via IIS.

Avez-vous essayé de faire cela dans votre code, avant d'appeler toutes les données:

MyDataContext ctx = new MyDataContext(uri); 
ctx.Credentials = System.Net.CredentialCache.DefaultCredentials; 
ctx.Credentials = new NetworkCredential( 
    "username", 
    "password", 
    "domain"); 

Bien sûr, vous devez avoir le nom d'utilisateur, mot de passe et le domaine.

Espérons que cela a aidé =)