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

时间:2008-09-03 04:03:49

标签: .net wcf web-services

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

我的界面设置了ServiceContract和OperationContract:

    [OperationContract]
    void FileUpload(UploadedFile file);

与实际方法一起:

    public void FileUpload(UploadedFile file) {};

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

我错过了什么吗?

9 个答案:

答案 0 :(得分:72)

如果您在服务方法上使用[WebInvoke(Method="GET")]属性,请确保将方法名称拼写为“GET”而不是“获取”或“获取”,因为它区分大小写!我有同样的错误,我花了一个小时来计算出那一个。

答案 1 :(得分:59)

您的浏览器正在发送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.
 }

答案 2 :(得分:4)

基本内在类型(例如byteintstring和数组)将由WCF自动序列化。自定义类(如UploadedFile)不会。

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

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

WCF开发的巨大资源是我们在商店中所知道的“鱼书”:Juval Lowy的Programming WCF Services。与其他一些WCF书籍不同,这些书籍有点干燥和学术性,这一点采用实用的方法来构建WCF服务,实际上是有用的。彻底推荐。

答案 3 :(得分:1)

听起来你使用了错误的地址:

  

要访问服务,请输入http://localhost/project/myService.svc/FileUpload

假设您的意思是这是您提供客户端代码的地址,那么我怀疑它应该是:

http://localhost/project/myService.svc

答案 4 :(得分:1)

我现在已经有一天多时间遇到同样的问题了 - 终于明白了。感谢@Sameh提示。

您的服务可能正常运作。使用浏览器的地址栏测试POST消息不起作用。您需要使用Fiddler来测试POST消息。

提琴手指示...... http://www.ehow.com/how_8788176_do-post-using-fiddler.html

答案 5 :(得分:1)

我今天遇到了同样的问题。我已经安装了IIS,但是没有在.net framework 4.6下启用激活的WCF服务。

enter image description here

答案 6 :(得分:0)

只能从浏览器IE访问WebGet的方法;只需输入地址

即可访问其他http动词

您可以尝试使用Restful service startup of codeples或使用fiddler来测试其他http动词

答案 7 :(得分:0)

您需要添加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> 

答案 8 :(得分:0)

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