Автоматическое разрешение имени хоста в публикации метаданных WCF - PullRequest
2 голосов
/ 30 декабря 2010

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

Я хотел бы выяснить, можно ли метаданным службы опубликовать правильный URL-адрес для клиента в зависимости от клиента, который его вызывает.Например, если я запрашивал метаданные службы с машины в той же сети, что и сервер, конечной точкой должно быть net.tcp: // MYSERVER: 1234 / MyEndpoint .Если бы я запрашивал его с компьютера за пределами сети, URL-адрес должен быть net.tcp: //MYSERVER.mydomain.com: 1234 / MyEndpoint .И очевидно, что если клиент находился на той же машине, то URL мог бы быть net.tcp: // localhost: 1234 / MyEndpoint .

Это просто недостаток в договоре IMetadataExchange по умолчанию?Есть ли какая-то причина, по которой метаданные должны публиковать информацию неконтекстно?Есть ли другой способ, которым я должен настраивать свои BaseAddresses для получения нужной мне функциональности?

Спасибо,

Майк

1 Ответ

2 голосов
/ 30 декабря 2010

Какую версию .NET вы используете?Если вы используете .NET 4.0, добавьте UseRequestHeadersForMetadataAddressBehavior к хосту службы:

UseRequestHeadersForMetadataAddressBehavior urh = 
    new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);

Очевидно, это необходимо сделать до открытия узла службы.

Если выВ .NET 3.5 есть исправление, которое добавляет это поведение: support.microsoft.com/kb/971842.

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