2008-09-03 151 views
39

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

我有我的接口设置标记了ServiceContract和OperationContract的:

[OperationContract] 
    void FileUpload(UploadedFile file); 

随着实际的方法:

public void FileUpload(UploadedFile file) {}; 

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

我错过了什么吗?

回答

58

您的浏览器发送一个HTTP GET请求:请确保您有WebGet属性上的化经营N的合同:

[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. 
} 
+3

这不适合我(框架4.0上的asp.net),但darthjit的回答下面做了 – Quango 2012-07-16 21:34:04

+5

那么为什么这个检查,而不是darjhit的? – 2013-11-20 08:43:20

+0

@LeiLeyba因为作者标记的答案,而不是社区 – 2017-09-13 17:30:30

4

WCF将自动序列化基本的内部类型(例如,byte,int,string和数组)。自定义类,就像你的UploadedFile,不会。

因此,一个愚蠢的问题(但我不得不问它...):是UploadedFile标记为[DataContract]?如果没有,您需要确保它是这样的,并且您希望发送的每个成员都标有[DataMember]。

与远程处理不同,在使用[XmlSerializable]标记类允许您序列化整个类而不打扰标记要序列化的成员时,WCF需要您标记每个成员。 (我相信这在.NET 3.5 SP1中发生了变化......)

WCF开发的巨大资源就是我们在商店里所知道的“鱼书”:由Juval Lowy编写的Programming WCF Services。与其他一些周边的WCF书籍不同,这些书有些枯燥而且颇具学术性,但它采用了一种实用的方法来构建WCF服务,并且实际上很有用。彻底推荐。

1

这听起来像您使用的是不正确的地址:

要访问我进入http://localhost/project/myService.svc/FileUpload

假设你的意思是这样的服务是您给您的客户端代码,然后我怀疑它的地址实际上应该是:

http://localhost/project/myService.svc 
70

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

+0

哈,这是我的问题。谢谢。 – canon 2011-06-02 14:46:24

-1

只有使用WebGet的方法可以从浏览器IE访问;您可以通过只输入地址

访问其他HTTP动词你可以试着codeples的RESTful服务启动套件或使用Fiddler来测试你的其他HTTP动词

0

需要在web插件。配置

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

<bindings> 
    <customBinding> 
     <binding name="basicConfig"> 
      <binaryMessageEncoding/> 
      <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/> 
     </binding> 
    </customBinding> 
0

我的情况:配置新的服务器上的服务。 ASP.NET 4.0未正确安装/注册;无法识别svc扩展名。

相关问题