HTTP動詞PUTとDELETEが適切であるか廃止されているかについての議論に巻き込まれるのを避け、これらの動詞を「強制」されたときにSilverlightを実際に機能させるという問題に焦点を当てたいと思います。
PUT動詞とDELETE動詞の操作を持つ既存のRESTWebサービスを呼び出すSilverlight4クライアントアプリケーションを作成しようとしています。このサービスは変更されません。
App.xaml.csのコンストラクターに次のステートメントを追加しました。
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
このサービスには、以下を含むclientaccesspolicy.xmlファイルがあります。
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
WebClientクラスを使用してGETおよびPOSTリクエストを処理しています。動詞/メソッドのPUTまたはDELETEで同じことを行おうとすると、あいまいな「セキュリティエラー」が発生し、上記のステートメントを追加することになりました。
HttpWebRequestを使用してこれを回避することについて話しているさまざまな投稿やブログ記事を見てきましたが、Silverlightクライアントからこれらの(非同期)呼び出しを行う方法を実際に示しているものは見つかりませんでした。
上記のコードに問題がある場合は、お知らせください。それ以外の場合は、これらのリクエストを実装する方法を示す例を示したり、指摘したりしていただければ幸いです。