Несколько клиентских конечных точек для одной и той же службы WCF

У меня есть служба WCF, работающая в LAN IIS, которая также доступна из Интернета.

Клиент, использующий службу, - это приложение, которое запускается в локальной сети и удаленно через Интернет. На DNS-сервере ничего не происходит, перенаправляя http://www.corporate.com/Service на http://serverName/Service, поэтому я полагаю, что мне понадобятся 2 конечные точки на клиенте.

Как настроить несколько конечных точек на клиенте (это так просто, как скопировать существующую точку enpoint, созданную в app.config, но изменить адрес?) И как настроить клиент для использования конкретной конечной точки?


person Steven Evers    schedule 20.10.2010    source источник


Ответы (3)


Вы можете хранить адреса конечных точек либо в app.config, либо в строках ресурсов. Затем, используя любое условие, вы передаете необходимый адрес конечной точки конструктору службы.

var endpoint = ApplicationSettings.IsRemote ? Resources.RemoteEndPoint: Resources.LocalEndPoint;
var service = new MyWCFService(new BasicHttpBinding(), new Endpoint(endpoint));
person Eugene Cheverda    schedule 20.10.2010
comment
Я не уверен, что ты имеешь в виду. Это происходит на сервере? Сервис уже запущен на сервере, я пытаюсь получить к нему доступ локально в зависимости от местоположения клиента (LAN или удаленный). - person Steven Evers; 20.10.2010
comment
Я имею в виду, что этот образец кода работает на клиенте. Вы должны определить любое необходимое количество конечных точек в app.config или строковых ресурсах, а затем передать требуемый адрес конечной точки в качестве параметра конструктору службы. Местоположение вы можете определить как любое предпочтительное состояние у клиента. - person Eugene Cheverda; 20.10.2010

App.config (или web.config) для каждой копии приложения должен иметь конечную точку для набора служб, основанную на той, которая ей нужна. Для установок в локальной сети используйте конечную точку, видимую в локальной сети; для всех остальных используйте Интернет.

Это может сэкономить вам время на поездку к маршрутизатору, но почему бы просто не использовать конечную точку Интернета повсюду? Если у ваших компьютеров LAN есть шлюз в Сеть, они могут видеть видимый извне адрес.

person KeithS    schedule 20.10.2010
comment
Поверьте, я бы с удовольствием это сделал, но разрешение / пересылка DNS не настроено на сервере, и заставить системного администратора это исправить просто «не произойдет». Даже для доступа к веб-почте Exchange требуется либо company.com/mail через Интернет, либо serverName / mail через локальную сеть. Использование company.com/mail в локальной сети приводит к ошибке 404. Судя по тому, что вы говорите, похоже, что у меня не может быть нескольких конечных точек? Я должен создать их во время выполнения в этой ситуации? - person Steven Evers; 20.10.2010
comment
Вам не нужно создавать их во время выполнения; вы должны указать тот, который будет использоваться во время выполнения. На самом деле у службы есть одна конечная точка, к которой вы обращаетесь через две разные схемы IP-адресации (ваша подсеть LAN и Интернет). Какой адрес вы используете, зависит от того, где находится ваш клиентский компьютер в сети, и вы можете указать клиенту, какой из них использовать, указав его в app.config. - person KeithS; 20.10.2010

Это так же просто, как изменить адрес и использовать конечную точку, созданную в конфигурации приложения. Возможно, вам придется изменить режимы безопасности в зависимости от того, что поддерживается на любом сервере, или от того, работают ли они на обоих HTTPS или нет. У нас есть приложение, в котором мы создаем целевую конечную точку на основе относительного пути к текущему URL-адресу в приложении Silverlight. Мы также динамически меняем режим безопасности на основе присутствия HTTPS, и он отлично работает.

person Steve Danner    schedule 20.10.2010