2010-12-05 4 views
0

У меня есть служба WCF, которая работает в основном с GET, но один контракт должен работать с POST. Я не могу заставить его работать - он возвращает «405 Method Not Allowed» все время.Использование WCF REST с POST

Служба должна получить JSON и вернуть JSON.

Я думаю, это что-то с конфигурацией. Вот мой файл 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> 

и сам

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

{ .... }

Любые идеи услуг? Помощь будет очень признательна!

+0

Возможный дубликат http://stackoverflow.com/questions/911859/wcf-rest-post-xml-the-remote-server-returned-an-error-400-bad- запрос и http://stackoverflow.com/questions/41155/wcf-service-returning-method-not-allowed – SRM 2010-12-05 15:25:22

+0

грустно это не дубликат :) – Roman 2010-12-05 15:29:46

ответ

0

Убедитесь, что вы действительно делаете POST. Потому что ваш код кажется действительным.

Попробуйте его, создав новый HTML-файл, содержащий что-то вроде:

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

попробовал - все еще ошибка. – Roman 2010-12-05 15:29:10

0

Проверьте мои комментарии для дублей, но это сводится к тому, убедившись, что у вас есть правильный глагол, поставляемый в контракте операции. Вот пример:

[ServiceContract(Namespace = "http://www.test.com/youruri")] 
public interface ISomeService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST")] 
    string SomeMethod(); 
} 
Смежные вопросы