質問

初めての 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拡張子が認識されませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top