Configurer WCF Client de consommer un Service WCF à l'aide de HTTP GET
J'ai un Service WCF qui autorise uniquement les requêtes HTTP GET:
[WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json)]
public string GetAppData()
Le service est accessible à l'aide webHttpBinding
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="AppSvcBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
J'ai mon client dont la config ressemble
<system.serviceModel>
<client>
<endpoint address="http://localhost/AppService/Service.svc"
binding="webHttpBinding"
bindingConfiguration="webHttpBindingConfig"
contract="AppSvc.IService"
behaviorConfiguration="AppSvcBehavior"
name="AppSvcClient">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingConfig">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="AppSvcBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Mon code client est un simple
ServiceClient client = new ServiceClient("AppSvcClient");
String result = client.GetAppData();
Sur l'exécution de ce code j'obtiens l'erreur:
Le serveur distant a renvoyé une réponse inattendue: (405) Méthode Non Autorisée.
J'ai vérifié avec un violon et constaté que mon client est l'envoi d'un message alors que le service s'attend à un GET d'où l'erreur.
Je voudrais savoir comment configurer le client de sorte que c'est l'envoie de la requête GET pour le service.
Ce que fait le reste de votre côté serveur de configuration?
OriginalL'auteur sandyiit | 2011-02-10
Vous devez vous connecter pour publier un commentaire.
Utilisation WebGet au lieu de WebInvoke
Modifier
Commencez par changer votre méthode pour cela:
Assurez-vous que webhttpbinding est spécifié sur le côté serveur.
Ce fixe sur le côté serveur.
Faire une sauvegarde de votre code client.
Sur le côté client de supprimer la référence de service. Assurez-vous que toutes les config est supprimé.
Puis ajouter le service de référence de nouveau. Maintenant, il devrait être OK.
J'ai besoin de quelque chose sur le côté client pour parler de la même
Vous avez besoin de mettre à jour la référence web après vous faire le changement pour le client de mise à jour
pour un webHttpBinding, service de mise à jour de référence est d'aucune utilité.
J'ai essayé WSHTTPBinding trop, mais pas de changement. Je voudrais savoir la config changement dans la Liaison ou le Comportement qui doit être à ne pas dire .NET pour faire le service d'appel d'une requête GET au lieu de POST.
OriginalL'auteur Shiraz Bhaiji
J'ai eu un problème similaire où le proxy généré par l'interface de service sur le client était absent de la
WebGet
attribut sur mes méthodes.J'ai ajouté manuellement l'attribut et il a résolu le problème.
Donc il semble que la meilleure solution actuelle est d'extraire les interfaces de service dans une autre assemblée, puis partager cette assemblée entre le serveur et ses clients.
Automatique de générateur de proxy semble être buggy.
OriginalL'auteur Steve