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>