2015-09-05 2 views
0

Я создал метод POF POF. когда я вызываю его из браузера, передавая параметр в querystring, он дает мне ошибку, напримерСлужба WCF Почтовый запрос дает сообщение об ошибке при вызове из браузера, например «Метод не разрешен».

Метод не допускается. Пожалуйста, обратитесь к странице справки службы для построения действительных запросов к службе

мой код находится в интерфейсе

[ServiceContract] 
public interface IService 
{ 
    //[OperationContract] 
    //[WebGet(UriTemplate = "/UpdateDeviceStatus?FaultStatus={FaultStatus}&MacAddress={MacAddress}", RequestFormat = WebMessageFormat.Xml)] 
    //string UpdateDeviceStatus(string FaultStatus, string MacAddress); 


    [OperationContract] 
    [WebInvoke(Method = "POST", 
    BodyStyle = WebMessageBodyStyle.WrappedRequest, 
    ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, 
    UriTemplate = "/UpdateDeviceStatus?FaultStatus={FaultStatus}&MacAddress={MacAddress}")] 
    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)] 
    string UpdateDeviceStatus(string FaultStatus, string MacAddress); 
} 

И Service.svc

public string UpdateDeviceStatus(string FaultStatus, string MacAddress) 
{ 
    try 
    { 
     // here my operation 
    } 
    catch (Exception ex) 
    { 
     return "Failed to update"; 
    } 
} 

URL, что я звоню из браузера is

http://localhost:2121/WcfService/Service.svc/UpdateDeviceStatus?FaultStatus={1}&MacAddress={20:10:00:20:10:00} 

ПРИМЕЧАНИЕ: если я использую webGet met hod, тогда он работает, но для метода POST он не работает, может кто-нибудь дать мне решение для этого?

+0

браузер не может отправлять запросы «POST». –

ответ

0

При обращении к ресурсу, введя адрес в своем браузере, запрос выполняется через GET.

Вот почему ваш сервис жалуется: запрос выполняется через GET, что запрещено, поскольку вы определили только POST-запросы ([WebInvoke(Method = "POST",).

Чтобы иметь возможность делать другие запросы, кроме GET, я бы рекомендовал использовать инструмент, например, Postman, который позволяет вам составить любой HTTP-запрос.

Подсказка, полученная с помощью сообщения об ошибке, также очень ценна: взгляните на страницу справки по обслуживанию. Там показан необходимый формат и сгенерированный вывод. Для включения страницы справки службы просмотрите this article.

0

попробовать как -

public class CompositeType 
{ 
    public string FaultStatus { get; set; } 
    public string MacAddress { get; set; } 
} 


[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "post")] 
CompositeType GetDataUsingDataContract(CompositeType composite); 

enter image description here

Используйте Fiddler или аналогичные инструменты, чтобы проверить это работает.

Кроме того, вы можете изменить свой config для того, чтобы помочь на службу -

<endpointBehaviors> 
    <behavior name="e"> 
     <webHttp helpEnabled="true"/> 
    </behavior> 
    </endpointBehaviors> 

Это помогает вам с разрешенными операциями, а также их возможных запросов и ответов форматов тела и т.д., перейдя yoururl/service.svc/help

0

Используйте инструменты отладки (параметры разработчика) вашего браузера (для Firefox это клавиша F12). На вкладке «Сеть» вы обнаружите, что браузер отправляет запрос на получение на сервер, пока сервер ожидает POST. отсюда ошибка.