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

时间:2010-03-23 08:14:28

标签: .net wcf

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

我天真地尝试过这个:

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

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

  

找不到端点元素   名称 '?'和合同   'SkyWalkerCustomerService.ICustomerService'   在ServiceModel客户端中   配置部分。这可能是   因为没有配置文件   找到您的申请,或因为   没有匹配此名称的端点元素   可以在客户端元素中找到。

那么如何在运行时声明端点并将服务引用指向它呢?

.NET 3.5

1 个答案:

答案 0 :(得分: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");

希望这会有所帮助。拿起它并随之运行,将其切碎并使其成为您自己的:)