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

我已经使用 ServiceContract 和 OperationContract 设置了界面:

    [OperationContract]
    void FileUpload(UploadedFile file);

连同实际方法:

    public void FileUpload(UploadedFile file) {};

要访问服务,我输入 http://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”,因为它区分大小写!我遇到了同样的错误,我花了一个小时才解决这个错误。

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

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

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

WCF 开发的巨大资源就是我们在我们店里所知道的“鱼书”: WCF 服务编程 作者:朱瓦尔·洛伊。与其他一些有点枯燥和学术性的 WCF 书籍不同,这本书采用实用的方法来构建 WCF 服务,并且实际上很有用。彻底推荐。

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

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

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

http://localhost/project/myService.svc

我已经遇到同样的问题一天多了 - 终于弄清楚了。感谢@Sameh 的提示。

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

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

IE浏览器只能访问WebGet方法;您只需输入地址即可访问其他 http 动词

您可以尝试 Codeples 的 Restful 服务启动套件或使用 fiddler 来测试其他 http 动词

你需要在 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> 

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top