Я работаю над приложением WCF, которое по пути будет развернуто на различных серверах, и мне не нужно помнить о необходимости изменять app.config каждый раз, когда я выполняю развертывание. Сначала мой раздел app.config serviceModel выглядел так:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" />
<behaviors>
<serviceBehaviors>
<behavior name="MyDefaultServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8888/MyService" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyDefaultServiceBehavior" name="MyService">
<endpoint address="net.tcp://localhost:9001/MyService" binding="netTcpBinding" contract="IMyService" name="NetTcpBinding_IMyService" />
</service>
</services>
Это прекрасно работает при разработке, когда я обращался к службе, работающей на моей локальной машине. Когда я развернул его, WSDL содержал абсолютные пути, которые все еще указывали на localhost:
<xsd:import schemaLocation=http://localhost:8888/MyService?xsd=xsd0 namespace="http://tempuri.org/" />
Итак, я могу изменить httpGetUrl в app.config следующим образом:
<serviceMetadata httpGetEnabled="true" httpGetUrl=http://devserver1:8888/MyService />
И теперь wsdl корректно работает на этом сервере. Проблема в том, что мне приходится вручную устанавливать адрес в каждом развернутом app.config.
Есть ли способ либо:
1. В wsdl уже есть все, чтобы не было импорта?
или
2. Использовать относительные пути в операторах импорта wsdl?
Или любые другие предложения будут оценены. У меня есть два сервера разработки, на которых развертывание автоматизировано, если бы не эта проблема с wsdl.
Поскольку это только для генерации прокси-сервера, я полагаю, что мог бы сгенерировать прокси-сервер и распространять его самостоятельно, но я бы предпочел, чтобы пользователи сами генерировали прокси-сервер.
Спасибо!
Daniel