Ответ 1
Ошибка довольно ясна - вы используете HTTP, вы включили HttpGetEnabled в свой сервис ServiceMetadata, но вы не указали базовый адрес в своей конфигурации.
В IIS базовые адреса не нужны и не используются, поскольку расположение файла *.svc определяет ваш служебный адрес. Когда вы являетесь владельцем собственного хостинга, вы можете и должны использовать базовые адреса.
Измените свою конфигурацию, чтобы выглядеть примерно так:
<system.serviceModel>
<services>
<service name="YourService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/YourService" />
</baseAddresses>
</host>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
..... (your own other endpoints) ...........
</service>
</services>
</system.serviceModel>
Теперь "HttpGetEnabled" имеет базовый адрес http://localhost.8080/YourService
, чтобы перейти от метаданных.
Или, если вам это не нравится, опять же, сообщение об ошибке достаточно ясно для вашей альтернативы: укажите абсолютный URL-адрес HttpGetUrl в вашем ServiceMetadata:
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="http://localhost:8282/YourService/mex" />
</behavior>
</serviceBehaviors>
Клиенты могут получать ваши метаданные из конечных точек "mex" с фиксированным URL-адресом, определенным в этом втором примере, или они перейдут на базовый адрес службы для метаданных (если таковой имеется).
Если вы пришли из IIS и ничего не адаптировали, у вас не будет ни базового адреса, ни явного абсолютного URL-адреса конечной точки обмена метаданными, поэтому вы получите ошибку, которую видите.
Марк