Мой сервис может работать с обычными вызовами WCF, но для предоставления метаданных (файл wsdl) мне нужно изменить конфигурацию таким образом, чтобы нормальный хост WCF не работал.
Я потратил бесчисленное количество часов в Google, пытаясь решить эту проблему, большая проблема в том, что хостинг службы внутри веб-сайта никогда не обсуждается (да, это другое).
Требования:
- Работает на существующем веб-сайте
- Использование сессий
- Работает с Java и с максимально возможным количеством версий .net.
- Выставить метаданные (будет достаточно wsdl)
редактирует:
- IIS не может использоваться
- Я использую .NET 4 и WCF 4.
В этой конфигурации метаданные могут быть доступны (через файл wsdl), но при попытке разместить обычные конечные точки wcf, которые я получаю, и InvalidOperationException:
Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой WSHttpBinding. Зарегистрированные схемы базовых адресов: [].
Таким образом, базовый адрес игнорируется.
Но когда я предоставляю полные адреса конечным точкам (просто копируем базовый адрес перед текущим адресом), нормальные вызовы WCF работают нормально, но при попытке доступа к метаданным я получаю следующую ошибку:
Нет привязки протокола к указанному адресу 'http://localhost:8080/Functionality'.
Привязки протокола настраиваются на уровне узла в конфигурации IIS или WAS.
Вот раздел web.config serviceModel, я сделал небольшой тестовый веб-сайт только для тестирования этого, но было бы слишком много, чтобы опубликовать все это здесь, если вы отправите мне личку, хотя я отправлю по электронной почте тебе.
<system.serviceModel>
<services>
<service behaviorConfiguration="metadataSupport" name="MyStuff.TestWithMetadata">
<endpoint address="Functionality" binding="wsHttpBinding" name="FunctionalityBinding"
contract="MyStuff.ITestWithMetadata" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="metadataSupport">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metadataSupport">
<!--Navigate with browser to httpGetUrl for the wsdl file-->
<serviceMetadata httpGetEnabled="true" httpGetUrl="Metadata" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false">
<serviceActivations>
<add relativeAddress="TestWithMetadata.svc" service="MyStuff.TestWithMetadata" />
</serviceActivations>
</serviceHostingEnvironment>
</system.serviceModel>
Если у кого-нибудь есть идеи, как решить эту проблему, пожалуйста, помогите.