XDT Transform, чтобы добавить режим безопасности для нескольких привязок

Мое веб-приложение использует несколько веб-сервисов, поэтому у меня есть привязки к каждому из них, например:

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_ICityDataService" allowCookies="true" maxBufferPoolSize="10000000" maxBufferSize="10000000" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="32" maxStringContentLength="10000000" maxArrayLength="10000000" />
      </binding>
      <binding name="BasicHttpBinding_IBuildingDataService" allowCookies="true" maxBufferPoolSize="10000000" maxBufferSize="10000000" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="32" maxStringContentLength="10000000" maxArrayLength="10000000" />
      </binding>
      <binding name="BasicHttpBinding_IEventDataService" allowCookies="true" maxBufferPoolSize="10000000" maxBufferSize="10000000" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="32" maxStringContentLength="10000000" maxArrayLength="10000000" />
      </binding>
      ...
    </basicHttpBinding>
  </bindings>

В моей среде разработки я не могу использовать SSL (и он мне не нужен), но когда я иду на развертывание, мне приходится использовать SSL, поэтому мне нужно добавить режим безопасности для каждой из этих привязок. Я применил следующее XDT-преобразование:

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding>
        <security mode="Transport" xdt:Transform="Insert">
          <transport clientCredentialType="None" />
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>

Но это только добавляет режим безопасности к первой привязке. Но даже после прочтения документации XDT Transform и ряда статей и SO вопросов / ответов я не могу понять, как указать локатор, который будет выбирать все привязки, чтобы дочерний узел добавлялся ко всем из них. Я мог бы указать каждую привязку по имени, но это кажется неуклюжим. Есть идеи?

1 ответ

Решение

Насколько я знаю, то, что вы хотите достичь (т.е. вставить новый элемент в несколько элементов), не поддерживается преобразованиями XDT, что очень жаль!

Одним из способов решения этой проблемы может быть добавление узла безопасности ко всем привязкам для среды разработки и установка для него значения Нет.

После этого вы можете иметь некоторые глобальные замены для обновления всех атрибутов до транспорта.

Ваш web.config должен быть что-то вроде

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_ICityDataService" allowCookies="true" maxBufferPoolSize="10000000" maxBufferSize="10000000" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="32" maxStringContentLength="10000000" maxArrayLength="10000000" />
        <security mode="None">
          <transport clientCredentialType="None" />
        </security>
      </binding>
      <binding name="BasicHttpBinding_IBuildingDataService" allowCookies="true" maxBufferPoolSize="10000000" maxBufferSize="10000000" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="32" maxStringContentLength="10000000" maxArrayLength="10000000" />
        <security mode="None">
          <transport clientCredentialType="None" />
        </security>
      </binding>
      <binding name="BasicHttpBinding_IEventDataService" allowCookies="true" maxBufferPoolSize="10000000" maxBufferSize="10000000" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="32" maxStringContentLength="10000000" maxArrayLength="10000000" />
        <security mode="None">
          <transport clientCredentialType="None" />
        </security>
      </binding>
      </basicHttpBinding>
  </bindings>
</system.serviceModel>

И ваше преобразование XDT должно быть как

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <!-- Define Global Replacements -->
  <replaceAll>
      <WCF_replaceBindingSecurityMode xdt:Locator="XPath(//basicHttpBinding/binding/security)" xdt:Transform="SetAttributes(mode)" mode="Transport" />
  </replaceAll>

</configuration>
Другие вопросы по тегам