Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

WCF служба, wsDualHttpBinding и 80 порт

При подключении к WCF службе вылетает exception, хотя в app.config конфиг явно указан не 80 порт:
An unhandled exception of type 'System.ServiceModel.AddressAlreadyInUseException' occurred in System.ServiceModel.dll Additional information: HTTP could not register URL http://+:80/Temporary_Listen_Addresses/c3e45f68-abf2-4847-95a6-cfd3f512fc54/ because TCP port 80 is being used by another application.
Самое странное, что на одном ПК вылетает exception, а на другом нет. В чем может быть проблема?
app.config клиента :

app.config сервер:


Ответ

Вы используете wsDualHttpBinding. В этом режиме клиент прослушивает некоторый адрес, где ожидает ответы от сервера. И вот этот-то адрес, который в конфиге вы не задавали, и находится на 80м порту по умолчанию!
Используйте атрибут clientBaseAddress для указания обратного адреса на клиенте:

Либо используйте другие способы соединения. Так, netTcpBinding - и без обратного адреса умеет передавать сообщения в обе стороны. Еще где-то в WCF есть поддержка веб-сокетов, но я не помню где.

Теперь почему может быть занят 80й порт на некоторых компьютерах. Скорее всего, это Skype, который использует этот порт по умолчанию:

Но, конечно же, не следует отбрасывать и вариант обычного веб-сервера, Apache, Nginx или Tomcat. А вот IIS с WCF "дружат", поскольку используют один и тот же HTTP.SYS.

Комментариев нет:

Отправить комментарий