WCF服务返回“方法不允许”

在开发我的第一个WCF服务的过程中,当我尝试使用它时,我得到“方法不允许”,没有其他解释。

我有我的界面与ServiceContract和OperationContract设置:

[OperationContract] void FileUpload(UploadedFile file); 

随着实际的方法:

  public void FileUpload(UploadedFile file) {}; 

要访问服务我inputhttp://localhost/project/myService.svc/FileUpload,但我得到“方法不允许”的错误

我错过了什么吗?

您的浏览器正在发送HTTP GET请求:请确保您在合同中的操作具有WebGet属性:

 [ServiceContract] public interface IUploadService { [WebGet()] [OperationContract] string TestGetMethod(); // This method takes no arguments, returns a string. Perfect for testing quickly with a browser. [OperationContract] void UploadFile(UploadedFile file); // This probably involves an HTTP POST request. Not so easy for a quick browser test. } 

如果在服务方法上使用[WebInvoke(Method="GET")]属性,请确保将方法名拼写为“GET”,而不是“Get”或“get”,因为它区分大小写。 我有同样的错误,花了一个小时才弄清楚了。

基本的内在types(例如byteintstring和数组)将被WCF自动序列化。 自定义类,像你的UploadedFile,不会。

所以,一个愚蠢的问题(但我不得不问)…:是UploadedFile标记为[DataContract] ? 如果没有,您需要确保它是,并且您要发送的类中的每个成员都标有[DataMember]。

与远程处理不同的是,使用[XmlSerializable]标记一个类允许您序列化整个类,而不用麻烦标记要序列化的成员,WCF需要您标记每个成员。 (我相信这是改变.NET 3.5 SP1 …)

WCF开发的巨大资源是我们在商店里所知道的“鱼书”:由Juval Lowy 编写的WCF服务 。 不像其他一些周边的WCF书籍,这有点干燥和学术,这一个采取实际的方法来build立WCF服务,实际上是有用的。 彻底推荐。

这听起来像你正在使用一个不正确的地址:

要访问服务,请inputhttp://localhost/project/myService.svc/FileUpload

假设你的意思是你给你的客户代码的地址,那么我怀疑它实际上应该是:

 http://localhost/project/myService.svc 

我现在一直都有这个问题 – 终于搞清楚了。 感谢@Sameh的提示。

您的服务可能工作得很好。 使用浏览器的地址栏testingPOST消息将不起作用。 您需要使用Fiddler来testingPOST消息。

提琴手说明… http://www.ehow.com/how_8788176_do-post-using-fiddler.html

你需要在web.config中添加

 <endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/> <bindings> <customBinding> <binding name="basicConfig"> <binaryMessageEncoding/> <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/> </binding> </customBinding> 

我的情况:在新的服务器上configuration服务。 ASP.NET 4.0未安装/正确注册; svc扩展名不被识别。

只有具有WebGet的方法才能从浏览器IE访问; 您只需input地址即可访问其他http动词

您可以尝试使用Restful服务启动工具包或使用fiddler来testing其他http动词