Как я могу изменить xml: base, опубликованную службой данных WCF? - PullRequest
1 голос
/ 02 июня 2010

У меня есть служба данных WCF, для которой у меня есть пользовательский перезаписывающий URL-адрес, поэтому реальный URL-адрес не отображается, и я могу добавить в путь специальные элементы для его настройки.
Например:
http://localhost/Data/ABCD.odata/
Карты для:
http://localhost/Data/OneData.svc/

Это почти работает, за исключением того, что служба публикует обратно в XML-ответе реальный путь, по которому она находится, таким образом приложения, такие как PowerPivot для Excel, просматривают этот URL-адрес и выполняют второе попадание по этому URL-адресу, а не по тому, который я хочу.

Итак, вопрос в том, как заставить службу публиковать в xml: base пользовательский URL.

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<service xml:base="http://localhost/Data/OneData.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
  <workspace>
    <atom:title>Default</atom:title>
    <collection href="Products">
      <atom:title>Products</atom:title>
    </collection>
  </workspace>
</service>

Я хочу это опубликовать:

<service xml:base="http://localhost/Data/ABCD.odata/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" 

Ответы [ 2 ]

0 голосов
0 голосов
/ 11 июня 2010

Для этого вам необходимо предоставить собственный хостинг для службы данных WCF. Пример является частью этого блога. Посмотрите на часть о реализации интерфейса IDataServiceHost. http://blogs.msdn.com/b/tom_laird-mcconnell/archive/2010/01/18/using-ado-net-wcf-data-services-for-streaming-infinite-event-result-sets.aspx

Хитрость заключается в предоставлении правильных значений свойств AbsoluteRequestUri и AbsoluteServiceUri. Это значения, которые будут использоваться службой для записи ответа (включая xml: base).

...