Обслуживание clientaccesspolicy.xml через службу WCF Rest, а также размещение на IIS - PullRequest
0 голосов
/ 26 апреля 2011

Я создаю простой файловый сервер HTTP.
У меня есть веб-приложение asp.net, которое предоставляет службу WCF (FileService.svc).
Договор на обслуживание:

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

Реализация сервиса довольно проста, и в основном я использую:

WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri

Чтобы получить путь к возвращаемому файлу (для его извлечения требуется небольшой анализ).

Так, например, при локальном размещении приложения в IIS я могу запросить файл у: http://localhost:65000/FileService.svc/someFolder1/someFolder2/someFile1.jpg

Проблемы начинаются, когда этот запрос выполняется изнутри silverlight приложение.Silverlight выполняет поиск в файле cliententaccesspolicy в http://localhost:65000/clientaccesspolicy.xml
Проблема заключается в том, что теперь этот запрос не будет доставлен в службу, поскольку FileService.svc опущен из URL.

(Я хочу, чтобы все запросы к файлудолжен обрабатываться службой WCF в HandleFileRequest (), а не каким-либо другим механизмом.)

Одно из решений, о котором я могу подумать, - это использовать модуль URL Rewrite в IIS 7.
Это правильный способ сделать это или есть более простое решение?

1 Ответ

0 голосов
/ 13 мая 2011

clientaccesspolicy.xml, используемый Silverlight , должен быть в корне домена - в вашем примере это будет означать http://localhost:65000/clientaccesspolicy.xml. Файл политики уникален для каждого домена, а не для службы.Однако вы можете установить разные политики для разных сервисов, добавив по одному элементу для каждого сервиса в файле 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="/FileService.svc/" include-subpaths="true"/>
      </grant-to>
    </policy>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://some.other.domain"/>
      </allow-from>
      <grant-to>
        <resource path="/AnotherService/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
...