Изменение общедоступного URL-адреса конечной точки для веб-службы WCF без изменения привязок сайта - PullRequest
3 голосов
/ 12 марта 2012

У меня есть веб-служба WCF, размещенная в IIS7, которая сообщает свой URL-адрес конечной точки следующим образом в своем WSDL

http://machinename/virtualdirectory/service.svc

Однако фактический публичный URL-адрес, который необходимо использовать клиентам, на самом деле

http://machinename.mydomain.com/virtualdirectory/service.svc

И в настоящий момент клиенты, которые пытаются использовать этот веб-сервис, терпят неудачу, если они не редактируют URL-адрес конечной точки вручную.

Я знаю, что могу это исправить, изменив привязки сайта в IIS согласно HOWTO: исправить имя хоста WCF на IIS , однако в этом случае сайт используется совместно с другим приложением, которое перестает работать, если я это делаю, и поэтому не является опцией.

Есть ли другой способ изменить URL-адрес конечной точки, который WCF использует для этого одного виртуального каталога?

Ответы [ 2 ]

7 голосов
/ 12 марта 2012

Хотя я не отвечаю прямо на мой вопрос (как я могу задать URL-адрес конечной точки WSDL в файле web.config), добавление элемента <useRequestHeadersForMetadataAddress /> в раздел <serviceBehaviors> моего файла web.config решило мои проблемы, так как теперь URL-адрес конечной точки основан на URL-адресе, используемом для доступа к WSDL, который всегда совпадает с URL-адресом, используемым для вызова веб-службы.

Обратите внимание, что в этом вопросе SO это указывало на то, что мне нужно было указать номера портов, отметьте, что мне это не нужно - достаточно просто добавить элемент <useRequestHeadersForMetadataAddress />

<serviceBehaviors>
   <behavior name="<name>">
     <!-- Other options would go here -->
     <useRequestHeadersForMetadataAddress />
   </behavior>
</serviceBehaviors>
1 голос
/ 12 марта 2012

В зависимости от версии WCF, используемой вашим сервисом, существует несколько вариантов. Если вы используете .NET 4 или выше, посмотрите на принятый ответ на этот вопрос . В противном случае вы можете либо применить исправление, которое ссылается на вопрос, либо, если вы действительно в отчаянии, взломать URL-адрес метаданных атрибута httpGetUrl, чтобы он указывал на копию WSDL, которая была отредактирована вручную и содержала требуемый URL-адрес конечной точки.

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