Укажите IP-адрес конечной точки WCF во время выполнения - PullRequest
3 голосов
/ 23 марта 2010

У меня есть несколько удаленных машин, на которых запущена одна и та же служба WCF через HTTP. У меня есть утилита центральной конфигурации, которая должна решить во время выполнения, к какому из них подключиться. Я не хочу определять все конечные точки в файле конфигурации, потому что все это управляется базой данных.

Я наивно пробовал это:

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 Ответ

3 голосов
/ 23 марта 2010

Это фрагмент кода, который я использую для настройки моих конечных точек в приложении 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");

Надеюсь, это поможет. Возьми его и беги с ним, порежь и сделай его своим:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...