我经常想在测试期间更改WCF服务客户端的主机URL。在我的配置,我通常有一个结合是这样的:更改WCF客户端主机地址 - 动态绑定安全
<basicHttpBinding>
<binding name="ListsSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="5120000" maxNameTableCharCount="16384"/>
<security mode="Transport">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
这是很容易在运行时换出地址:
ServiceClient svc = new ServiceClient();
svc.Endpoint.Address = new EndpointAddress("http://wherever");
的问题是,如果我从https更改地址http,称该服务会爆炸说它期望https,因为它试图使用传输安全。
看来svc.Endpoint的Binding是只读的,只能在构造函数中设置。我可以使用正确的安全模式创建一个绑定,但是然后我失去了配置文件中配置的所有其他属性值。我不想尝试明确地复制它们。有没有办法使用配置文件<binding>
创建一个新的BasicHttpBinding,然后改变它的安全模式,这样我就可以使用绑定实例化svc了?
我很困惑。我试过你的代码,它确实有效,但是如果Mode属性在这里是可写的,它也应该可以在ServiceClient实例上写入。它是。我可以设置绑定的模式,或者在svc被实例化后替换整个绑定本身。我可以发誓昨天它不会让我设置它们,并且描述中说“设置...”而不是“获取或设置......”。无论如何,我不知道你可以创建BasicHttpBinding传递配置名称,这是我最初_thought_必须的方法的关键。如果我可以的话,我会投下我自己的问题。 – xr280xr