2016-03-07 2 views
0

Мой веб-приложение использует несколько веб-сервисов, поэтому у меня есть привязки к каждому из них, как это: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 documentation и ряда статей и вопросов и ответов 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> 
+0

Я подозревал, что у XDT не было того, что я хотел, и вы правы, это очень жаль. Я фактически добавил преобразования, которые размещали каждую привязку, и вставил узел режима безопасности после узла readerQuotas. Но ваше решение более изящное и меньше кода. Благодаря тонну. – AgapwIesu