代码之家  ›  专栏  ›  技术社区  ›  jdiaz

wcf服务返回“不允许的方法”

  •  39
  • jdiaz  · 技术社区  · 16 年前

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

    我已经设置了与服务合同和操作合同的接口:

        [OperationContract]
        void FileUpload(UploadedFile file);
    

    结合实际方法:

        public void FileUpload(UploadedFile file) {};
    

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

    我错过什么了吗?

    8 回复  |  直到 9 年前
        1
  •  59
  •   Ries    10 年前

    您的浏览器正在发送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
  •  73
  •   darthjit    15 年前

    如果您正在使用 [WebInvoke(Method="GET")] 服务方法的属性,确保将方法名拼写为“get”,而不是“get”或“get”,因为它区分大小写!我也犯了同样的错误,我花了一个小时才找出那个错误。

        3
  •  4
  •   Jeremy McGee    16 年前

    基本的内在类型(例如 byte , int , string 和数组)将由wcf自动序列化。自定义类,比如上载的文件,不会是。

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

    与远程处理不同,在用[xmlserializable]标记类的情况下,您可以序列化整个类,而不必费心标记要序列化的成员,WCF需要您标记每个成员。(我相信这在.NET 3.5 SP1中发生了变化…)

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

        4
  •  1
  •   Ubiguchi    16 年前

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

    访问我输入的服务 http://localhost/project/myService.svc/FileUpload

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

    http://localhost/project/myService.svc
    
        5
  •  1
  •   flobadob    10 年前

    我已经有一天多遇到了同样的问题-终于解决了。感谢@sameh的提示。

    你的服务可能很好。无法使用浏览器的地址栏测试邮件。你需要用小提琴来测试一个帖子。

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

        6
  •  0
  •   Sameh    13 年前

    只有使用webget的方法才能从浏览器IE访问;您只需键入地址即可访问其他HTTP谓词。

    您可以尝试代码执行器的restful服务启动工具包,也可以使用fiddler测试其他HTTP谓词。

        7
  •  0
  •   andrewsi Laxman Battini    12 年前

    您需要添加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
  •   dudeNumber4    9 年前

    我的案例:在新服务器上配置服务。ASP.NET 4.0未正确安装/注册;无法识别SVC扩展。