8

Microsoft の WCF REST サービス テンプレート 40 を使用して、.NET 4 で WCF REST (別名 WebHttp) サービスを作成しました。IIS 6 でサービスをホストしています。

サービス テンプレートは、".svc" を含まない "クリーンな" URL を作成する方法として、Global.asax の RouteTable を使用します。例えば:

http:// localhost / フライト / 878

GET と POST はこの URL に対して正常に機能しますが、PUT と DELETE は HTTP 501「実装されていません」という結果になります。

次のような単純な .svc ファイルを作成すると:

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%>

次に、この URL に対して PUT と DELETE を使用できます。

http:// localhost / flightservice.svc / 878

上記の「クリーンな」URL に対して PUT と DELETE を機能させることが可能かどうかは誰にもわかりませんか? 設定を構成するファイル拡張子がなく、PUT と DELETE をグローバルに許可したくないため、これを許可するように IIS を構成する方法がないようです。

4

2 に答える 2

4

私はしばらく IIS6 を使っていませんでした (そして、インストールしていないので、ここで記憶をなくします)、IIS6 で拡張子のない URL をルーティングするために、IIS6 と同様のものを実装する必要がありました。

IIS マネージャーをハッキングすることで、フォルダーごとにワイルドカード スクリプト マッピングを有効にすることができます。このブログ投稿は私がフォローしたものであり、非常にうまく機能します (このリンクはもう少し背景を提供します)。これは、IIS 自体ではなく、Manager のバグです (少なくとも、私は自分自身に言い聞かせています)。

サイトのサブフォルダー (例: http://localhost/services/flight/878 ) でサービスを参照できますか? もしそうなら、上記のIISマネージャーのハックを実装すれば、そのディレクトリに対してすべてのHTTP動詞を有効にできると思います。繰り返しになりますが、私は記憶を失っています (GET と POST のみを実装したので、PUT と DELETE は扱いませんでした)。

さらに情報が必要な場合や、記憶が曖昧な場合はお知らせください。:)これが役立つことを願っています!

于 2010-08-21T01:39:47.367 に答える
2

Web アプリケーションが複数の開発/運用環境にデプロイされている場合、最善の方法は web.config レベルで WebDAV を無効にすることです。これを行うには、以下の例のように WebDAVModule と WebDAV ハンドラーを削除します。

<system.webserver>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webserver>
于 2012-09-06T20:22:45.767 に答える