WCF服务发布请求如果从浏览器调用就会出错,如#34;方法不允许。"

时间:2015-09-05 05:18:11

标签: asp.net wcf asp.net-mvc-4 wcf-data-services

我创建了WCF POST方法。当我通过在查询字符串中传递参数从浏览器调用它时,它给出了像

这样的错误
  

不允许使用方法。请参阅服务帮助页面以构建对服务的有效请求

我的代码在界面

[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是

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

注意:如果我使用webGet方法然后它可以工作但是对于POST方法它不起作用可以任何人请给我解决方案吗?

3 个答案:

答案 0 :(得分:0)

通过在浏览器中输入地址来访问资源时,请求通过GET完成。

这就是您的服务抱怨的原因:请求是通过GET完成的,这是不允许的,因为您定义为仅允许POST请求([WebInvoke(Method = "POST",)。

为了能够执行除GET之外的其他请求,我建议您使用Postman之类的工具,它允许您撰写任何类型的http请求。

您通过错误消息获得的提示也非常有价值:请查看您的服务帮助页面。这里显示了所需的格式和生成的输出。要启用服务帮助页面,请查看this article

答案 1 :(得分: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

,这可以帮助您完成允许的操作,可能的请求和响应正文格式等

答案 2 :(得分:0)

使用浏览器的调试工具(开发者选项)(对于Firefox,它是F12 Key)。 在网络选项卡中,您会发现浏览器在服务器期待POST时向服务器发送get请求。 因此错误。