2011-05-30 79 views
2

您好以下是操作合同,其中im trring插入一些数据,所以即时通讯使用WebInvoke POST方法,但当我调用此方法它给我一个错误,说“方法不允许”方法不允许错误,同时使用wcf webinvoke后

我必须更改任何配置设置以允许在web.config中进行POST调用吗?

[OperationContract] 
[WebInvoke(
UriTemplate = "/Album/PostData?name={name}&CrBy={createdBy}" , 
Method="POST")] 
void PostUserData(string name, string createdBy); 

和IM叫我的服务如下

http://localhost:2170/MySampleService.svc/xml/Album/PostData?name=devpost&CrBy=postadmin

+0

如何你打电话给方法吗? – 2011-05-30 07:56:18

回答

2

那么你应该使用Method="GET",如果你想打电话给你的服务是这样的。此外,方法名称和参数的定义似乎与您的查询字符串不匹配。

如果你想使用POST动词,那么你需要发送一个POST请求,你将无法直接在浏览器中输入url来调用服务。

+5

不!获取操作不应修改数据。他们应该是幂等的。 – 2011-05-30 08:00:10

+0

@Ladislav Mrnka,这是正确的,我没有注意到他正在尝试修改数据。 – 2011-05-30 08:01:51

+0

“,您将无法通过在浏览器中直接输入网址来调用该服务” - 这只是为我节省了一堆时间!谢谢!!! – 2013-05-13 10:16:48

0

你是否在浏览器中用JavaScript调用你的服务?

html页面是否与wcf服务位于同一个域中?

如果他们不在同一个域中,那么我会说,这是一个跨站点脚本问题。我相信GET是允许跨站点的,但POST不是。 http://en.wikipedia.org/wiki/JSONP将是一个解决方案,如果支持服务器端(通过WCF)

1

你需要在web.config中添加

1.

<endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/> 

2.

<bindings> 
     <customBinding> 
     <binding name="basicConfig"> 
      <binaryMessageEncoding/> 
      <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/> 
     </binding> 
     </customBinding> 
    </bindings> 
相关问题