Невозможно получить доступ через сеть с помощью WCF - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть собственная служба WCF в приложении Windows Forms .Я собираюсь использовать его, чтобы портативное мобильное устройство могло взаимодействовать с приложением на базовом уровне.

Я включил BasicHttp (http://localhost:8080/tagservice/basic), NetTCP (net.tcp://localhost:8888/tagservice) и basicHttpMex какконечные точки.

В целях тестирования я настроил виртуальную машину в сети (и повторил их и на физической машине).

Все эти конечные точки работают на локальной машине, где служба

Однако при запуске WCFTestClient на удаленных машинах я получаю смешанные результаты.

  1. Используя указанные выше конечные точки, я могу подключиться к службе и увидеть контракты на обслуживание, подтверждающиеmex (IMetadataExhange) работает.Но я не могу использовать ни http, ни net.tcp.Я получаю сообщение об ошибке

Не удается подключиться к http://localhost:8080/tagservice/basic. Код ошибки TCP 10061: не удалось установить соединение, поскольку целевая машина активно отказала ему 127.0.0.1:8080.

Не удалось подключиться к net.tcp: // localhost: 8888 / tagservice.Попытка подключения длилась в течение промежутка времени 00: 00: 01.0014400.Код ошибки TCP 10061: не удалось установить соединение, поскольку целевая машина активно отказывала в этом 127.0.0.1:8888.

При изменении localhost на реальный IP-адрес в app.config на хосте, в данном случае 192.168.0.61.Базовый HTTP работает.Однако net.icp завершается с ошибкой

«Сервер отклонил учетные данные клиента.»

У меня два вопроса:

  1. Почемуnet.tcp не работает?Насколько я могу судить, у меня нет выбора для ввода учетных данных.
  2. Учитывая, что IP-адрес может измениться, как я могу заставить app.config использовать IP-адрес, назначенный ему DHCP-сервером?Когда программное обеспечение переходит из среды разработки в производственную среду, IP-адрес не может быть жестко закодирован, поскольку он изменится.

Ответы [ 2 ]

4 голосов
/ 21 февраля 2011

Сборка и настройка привязки клиента во время выполнения, чтобы вы могли программно установить URL-адрес на основе информации о машине

Как-то так должно работать

string hostName = System.Net.Dns.GetHostName();
int port = 8080;
Uri serviceUri = new Uri(string.Format("http://{0}:{1}", hostName, port.ToString()));


EndpointAddress endpoint = new EndpointAddress(serviceUri);

Затем вы просто присоединяете эту конечную точку к вашему клиенту, и она должна все подключиться.

3 голосов
/ 21 февраля 2011

Вы можете заменить localhost на свое имя хоста (если IP-адрес динамический) или IP-адрес (если статический) и перекомпилировать ваш клиент.

...