2008-09-03 158 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擴展名。

相關問題