2015-09-05 59 views
0

我已经创建了WCF POST方法。当我通过在查询字符串中传递参数从浏览器调用它时,它给了我类似如下的错误: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"; 
    } 
} 

网址是

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

注意:如果我使用webGet会见那么它的工作原理,但对于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,使您的服务帮助 - 导航到yoururl/service.svc

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

这可以帮助你与所允许的操作,其可能的请求和响应正文格式等/帮助浏览器的

0

使用调试工具(开发者选项)(适用于Firefox是F12键)。 在网络选项卡中,您会发现浏览器正在向服务器发送获取请求,而服务器正在等待POST。 因此错误。

相关问题