WCF动态绑定 - 如何指定端点?

时间:2017-05-18 02:44:03

标签: c# .net wcf

我正在尝试使用代码而不是app.config绑定我的WCF客户端,因为我需要更改不同部署的主机IP地址。

这是我的app.config:

for j in range(int(bc),int(bc)+3):

这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
    </startup>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_ICX" maxReceivedMessageSize="1073741824" >
                    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://127.0.0.1/CX/CX.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ICX" contract="CXService.ICX" name="WSHttpBinding_ICX">
                <identity>
                    <servicePrincipalName value="host/SilverStar" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

代码的最后一行不能编译为.EndPoint是只读属性。

请帮忙。

2 个答案:

答案 0 :(得分:1)

试试这个:

Globals.CXClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("your url here");

答案 1 :(得分:0)

这就是我做到的。

Globals.CXClient.Endpoint.Contract = new ContractDescription("CXService.ICX");
Globals.CXClient.Endpoint.Binding = binding1;
Globals.CXClient.Endpoint.Address = addr;

然而,我遇到了另一个问题。我试图更换部件:

<identity>
    <servicePrincipalName value="host/SilverStar" />
</identity>

使用以下代码:

addr.Identity = new SpnEndpointIdentity("host/SilverStar");

这个再次无法编译,因为addr.Identity是只读的。

我也试过这个:

EndpointAddress addr = new EndpointAddress(new Uri("http://127.0.0.1/CX/CX.svc"), new SpnEndpointIdentity("host/SilverStar"), ???);

但最后一个参数是一个AddressHeaderCollection,我不知道应该放在那里。

请再次帮助。感谢。