【发布时间】:2010-10-09 21:53:34
【问题描述】:
我正在开发一个 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/" />
所以,我可以像这样更改 app.config 中的 httpGetUrl:
<serviceMetadata httpGetEnabled="true" httpGetUrl=http://devserver1:8888/MyService />
现在 wsdl 可以在该服务器上正常工作。问题是我必须在部署的每个 app.config 中手动设置地址。
有没有办法:
1. wsdl 是否已经包含所有内容,因此没有导入?
或
2. 在 wsdl 导入语句中使用相对路径?
或任何其他建议将不胜感激。如果不是因为这个 wsdl 问题,我有两个自动部署的开发服务器。
由于这只是为了生成代理,我想我可以自己生成代理并分发它,但我宁愿让用户自己生成代理。
谢谢! 丹尼尔
【问题讨论】: