XDT转换为安全模式添加到多个绑定
问题描述:
我的Web应用程序使用的多个Web服务,所以我必须绑定到他们每个人,像这样的:XDT转换为安全模式添加到多个绑定
<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和一些文章以及问题/答案之后,我也无法弄清楚如何指定一个定位器来选择所有的绑定,以便将子节点添加到所有的绑定中。我可以按名称指定每个绑定,但看起来很笨重。有任何想法吗?
答
据我所知,你想达到什么(即在多个元素上插入新元素)不受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>
我怀疑XDT没有我想要的东西,你是对的,这是可惜的。实际上,我添加了位于每个绑定的变换,并在readerQuotas节点之后插入了安全模式节点。但是,您的解决方案更优雅,代码更少。万分感谢。 – AgapwIesu