2011-08-23 4 views
1

Je continue à obtenir l'erreur suivante lorsque vous essayez de consommer un WebService:WCF REST Consommant erreur

La requête HTTP est non autorisé avec le schéma d'authentification du client « Basic ». L'en-tête d'authentification reçu du serveur était «Basic Realm».

Webservice est REST écrit avec WCF. L'authentification est basique sur https.

Toute aide corrigeant l'erreur serait appréciée.

Voici le code que j'ai essayé:

WebHttpBinding webBinding = new WebHttpBinding(); 
    webBinding.Security.Mode = WebHttpSecurityMode.Transport; 
    webBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 

    ChannelFactory<ServiceReferences.BTService.FLDT_WholesaleService> factory = new ChannelFactory<ServiceReferences.BTService.FLDT_WholesaleService>(webBinding, 
                     new EndpointAddress(
                      "https://wholesale.fluidata.co.uk/FLDT_BT_wholesale/Service.svc")); 
    factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
    factory.Credentials.UserName.UserName = "username"; 
    factory.Credentials.UserName.Password = "password"; 

    ServiceReferences.BTService.FLDT_WholesaleService proxy = factory.CreateChannel(); 

    proxy.AvailabilityCheck("123"); 
+0

Hébergez-vous le service REST sur IIS? – Codo

+0

@Codo Oui. Je l'héberge dans IIS –

+0

Qui est censé vérifier le nom d'utilisateur et mot de passe? IIS ou le service WFC? – Codo

Répondre

1

Tant que vous exposiez le service RESTful vous pouvez tenter d'utiliser Fiddler - http://www.fiddler2.com/fiddler2/ et/ou normal HttpRequest/HttpResponse. Avez-vous essayé quelque chose comme ça?

+0

Je peux utiliser httpwebrequest et HttpResponse très bien. J'ai besoin de le consommer avec le ChannelFactory donc je ge ge plutôt que XML. –

0

La réponse de M. Franek est utile - vous utiliserez Fiddler pour travailler avec la WCF, période. Je peux ajouter un peu ... ce qui se passe ici, c'est que vous avez spécifié "Basic" comme schéma d'authentification en tant que client. Le serveur dit "Je n'autorise" Basic Realm "" que le schéma d'authentification. Qu'est-ce que le «royaume»? Fondamentalement, un espace de noms des titres de compétence:

Realm for HTTP basic authentication

est ici un autre lien utile: Authentication in WinHTTP

Je ne peux pas trouver une surcharge de propriété ou une méthode qui porte Realm ... Je probablement essayer de construire le Authenticate- WWW en-tête manuellement.

Cela irait à quelque chose comme ceci:

request.Headers.Add("WWW-Authenticate", string.Format("basic realm=\"{0}\", realm)); 

« royaume » serait la valeur de ce que le serveur attend, par exemple, « www.targetsite.com ».

+0

Pouvez-vous publier un exemple de la façon de contracter manuellement l'en-tête Authenticate-WWW? –