WCF サービスが「メソッドは許可されていません」を返す
-
09-06-2019 - |
質問
初めての 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」として入力してください。私も同じエラーに遭遇しましたが、それを理解するのに1時間かかりました。
基本的な組み込み型 (例: byte
, int
, string
, 、配列)は、WCF によって自動的にシリアル化されます。カスタム クラス (UploadedFile など) はそうではありません。
そこで、愚かな質問です(しかし、私は尋ねなければなりません...):としてマークされたアップロードファイルです [DataContract]
?そうでない場合は、そうであること、および送信するクラスの各メンバーが [DataMember] でマークされていることを確認する必要があります。
[XmlSerializable] でクラスをマークすると、シリアル化したいメンバーをわざわざマークしなくてもクラス全体をシリアル化できるリモート処理とは異なり、WCF では各メンバーをマークアップする必要があります。(これは .NET 3.5 SP1 で変更されると思います...)
WCF 開発にとって非常に重要なリソースは、当店で「フィッシュ ブック」として知られているものです。 WCF サービスのプログラミング ジュヴァル・ローウィ著。少し無味乾燥で学術的な他の WCF 本とは異なり、この本は WCF サービスを構築するための実践的なアプローチを採用しており、実際に役立ちます。徹底的にお勧めします。
間違ったアドレスを使用しているようです:
サービスにアクセスするには入力します http://localhost/project/myService.svc/FileUpload
これがクライアントコードに与えるアドレスであると仮定すると、実際には次のようになっているはずだと思います。
http://localhost/project/myService.svc
私はこれと同じ問題を一日以上抱えていました - ついにそれを理解しました。ヒントをくれた @Sameh に感謝します。
あなたのサービスはおそらく正常に動作しています。ブラウザのアドレス バーを使用した POST メッセージのテストは機能しません。POST メッセージをテストするには、Fiddler を使用する必要があります。
バイオリン弾きの指示...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拡張子が認識されませんでした。