Ошибка совершенно очевидна - вы используете 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, определенному, как в этом втором примере, либо они перейдут на базовый адрес службы для метаданных (если они есть). 1014 *
Если вы пришли из IIS и ничего не адаптировали, у вас не будет ни базового адреса, ни явного, абсолютного URL-адреса для конечной точки обмена метаданными, поэтому вы получаете сообщение об ошибке, которую видите.
Марк