0

単純なHTTPファイルサーバーを構築しています。
WCFサービス(FileService.svc)を公開するasp.netWebアプリケーションがあります。
サービス契約は次のとおりです。

[OperationContract]
[WebGet(UriTemplate = "/*")]
Stream HandleFileRequest();

サービスの実装は非常に簡単で、基本的に私は以下を使用します:

WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri

返されるファイルのパスを取得するには(ファイルを抽出するには少し解析が必要です)。

したがって、たとえば、IISでローカルにアプリをホストする場合、次の場所からファイルをリクエストできます: http:// localhost:65000 / FileService.svc / someFolder1 / someFolder2 / someFile1.jpg

この要求がSilverlightアプリ内から行われると、問題が発生します。Silverlightは、http:// localhost:65000 / clientaccesspolicy.xml
でclientaccesspolicyファイルを検索します 。問題は、FileService.svcがURLから省略されているため、この要求がサービスに到達しないことです。

(すべてのファイル要求をHandleFileRequest()のWCFサービスで処理し、他のメカニズムでは処理しないようにします。)

私が考えることができる1つの解決策は、IIS 7のURL書き換えモジュールを使用することです。
これはこれを行う正しい方法ですか、それともこれに対するより簡単な解決策がありますか?

4

1 に答える 1

0

Silverlight で使用される clientaccesspolicy.xmlは、ドメイン ルートにある必要があります。この例では、 http://localhost:65000/clientaccesspolicy.xml を意味ます。ポリシー ファイルは、サービスごとではなく、ドメインごとに一意です。ただし、次の例に示すように、clientaccesspolicy.xml ファイルにサービスごとに 1 つの要素を追加することで、サービスごとに異なるポリシーを設定できます。

<?xml version="1.0" encoding="utf-8"?>
<アクセスポリシー>
  <クロスドメインアクセス>
    <ポリシー>
      <allow-from http-request-headers="*">
        <ドメイン uri="*"/>
      </allow-from>
      <付与先>
        <resource path="/FileService.svc/" include-subpaths="true"/>
      </grant-to>
    </ポリシー>
    <ポリシー>
      <allow-from http-request-headers="*">
        <ドメイン uri="http://some.other.domain"/>
      </allow-from>
      <付与先>
        <resource path="/AnotherService/" include-subpaths="true"/>
      </grant-to>
    </ポリシー>
  </クロスドメイン アクセス>
</アクセス ポリシー>
于 2011-05-13T06:13:40.483 に答える