在运行时指定WCF端点的IP地址

3

我有一堆远程机器,都在通过HTTP运行相同的WCF服务。我有一个中央配置工具,需要在运行时决定连接哪个机器。我不想在配置文件中定义所有的终结点,因为这是基于数据库驱动的。

我尝试了以下方法,但并不理想:

CustomerServiceClient GetClientForIPAddress(string ipAddress)
{
 string address = String.Format("http://{0}/customerservice.svc", ipAddress);
 var client = new CustomerServiceClient("?", address);
 return client; 
}

在这里,CustomerServiceClient是我的服务引用代理类,但(不出所料),它给了我以下错误:

在ServiceModel客户端配置部分中找不到名称为'?'且合同为'SkyWalkerCustomerService.ICustomerService'的终结点元素。这可能是因为您的应用程序找不到配置文件,或者因为没有找到与此名称匹配的终结点元素。

那么我该如何在运行时声明一个终结点并将我的服务引用指向它呢?

.NET 3.5


我相信这是一个重复的问题 https://dev59.com/R0vSa4cB1Zd3GeqPbQ0D - Kirk Broadhurst
1个回答

3
这是我在Silverlight应用程序中使用的一段代码,用于配置我的终结点:
    private void initEndpoint(ServiceEndpoint endPoint, string serviceName)
    {
        Uri hostUri = Application.Current.Host.Source;
        string vdir = hostUri.LocalPath.Substring(0, hostUri.LocalPath.IndexOf("/ClientBin", StringComparison.InvariantCultureIgnoreCase));
        string wcfBaseUri = string.Format("{0}://{1}:{2}{3}/WebServices/", hostUri.Scheme, hostUri.Host, hostUri.Port, vdir);

        endPoint.Address = new EndpointAddress(new Uri(wcfBaseUri + serviceName));
    }

传入的endPoint是要配置的端点,serviceName是服务的名称,例如MyLoggingService.svc。我只需要将其指向一个新地址(在本例中是托管网站中已知的位置)。您可以使用此示例,并从任何地方传递自己的字符串地址。
调用它的代码如下:
_loggingService = new LoggingServiceClient();
initEndpoint(_loggingService.Endpoint, "LoggingService.svc");

希望这可以帮助到您。拿走并运用它,将其加工成您自己的东西 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接