На машине с несколькими сетевыми платами я должен связать веб-сервис WCF с определенным сетевым интерфейсом. Кажется, что значение по умолчанию должно привязать все сетевые интерфейсы.
Машина имеет два сетевых адаптера с дюйм/с 192.168.0.10
и 192.168.0.11
. У меня есть Apache, работающий, который привязывает 192.168.0.
10
:80
и должен работать на веб-сервисе 192.168.0.
11
:80
. (Из-за внешних обстоятельств я не могу выбрать другой порт.)
Я попробовал следующее:
string endpoint = "http://192.168.0.11:80/SOAP";
ServiceHost = new ServiceHost(typeof(TService), new Uri(endpoint));
ServiceHost.AddServiceEndpoint(typeof(TContract), Binding, "");
// or: ServiceHost.AddServiceEndpoint(typeof(TContract), Binding, endpoint);
Но это не работает; netstat -ano -p tcp
всегда показывает веб-сервис, слушающий на 0.0.0.0:80
, который является всеми интерфейсами (если я добрался, это исправляет). Когда я запускаю Apache сначала, он правильно связывает с другим интерфейсом, который в свою очередь предотвращает сервис WCF для привязки со "всеми".
Какие-либо идеи?
У нас на работе похожая проблема, и я занимался ее изучением, когда наткнулся на ваш пост. У меня еще не было возможности попробовать, но я планирую это сделать, когда у нас появится шанс: в Binding есть "hostNameComparisonMode", который, если установлен на "Exact", должен всегда подчиняться вашим настройкам. (По умолчанию он может перейти к подстановочному символу, если совпадение не найдено.)
Если у вас будет возможность попробовать это раньше меня, пожалуйста, сообщите мне о результатах. В противном случае я обновлю свой ответ и дам вам знать!