2010-12-05 18 views
0

J'ai un service WCF qui fonctionne principalement avec GET mais un contrat doit fonctionner avec POST. Je ne peux pas le faire fonctionner - il renvoie "405 Méthode non autorisée" tout le temps.Utilisation de WCF REST avec POST

Le service doit recevoir JSON et renvoyer un JSON.

Je suppose que c'est quelque chose avec la configuration. Voici mon fichier web.config:

<behaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 
<standardEndpoints> 
    <webHttpEndpoint> 
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json" /> 
    </webHttpEndpoint> 
</standardEndpoints> 

et le service lui-même

[OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "LoginUser", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json)] 
    public int Login(string user, string password) 

{ .... }

Toutes les idées? L'aide serait très appréciée!

+0

double possible de http://stackoverflow.com/questions/911859/wcf-rest-post-xml-the-remote-server-returned-an-error-400-bad- demande et http://stackoverflow.com/questions/41155/wcf-service-returning-method-not-allowed – SRM

+0

malheureusement ce n'est pas un doublon :) – Roman

Répondre

0

Assurez-vous que vous faites vraiment un POST. Parce que votre code semble valide.

Essayez en créant un nouveau contenant quelque chose comme fichier html:

<form action="http://{Address to your service}/Service.svc/LoginUser" method="POST"> 
    <input type="submit" value="Fire away!" /> 
</form> 
+0

l'a essayé - toujours une erreur. – Roman

0

Regarde mes commentaires pour les doublons mais il se résume à faire en sorte que vous avez le bon verbe fourni dans votre contrat d'exploitation. Voici un exemple:

[ServiceContract(Namespace = "http://www.test.com/youruri")] 
public interface ISomeService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST")] 
    string SomeMethod(); 
} 
+0

Tout semble aller. changé le "BodyStyle" à Bare - et obtenir une erreur de serveur. Donc, je suppose que ce n'est pas ça :) – Roman

+0

Bon, mon exemple était un peu embrouillé, oubliez les trucs de RequestFormat, assurez-vous simplement que la méthode = "POST" est là. – SRM

+0

Oui. Tout est là ... C'est la partie étrange. Peut-être que c'est un problème de web.config? – Roman