我正在开发一个 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 问题,我有两个开发服务器可以自动部署。
由于这只是为了生成代理,我想我可以自己生成代理并分发它,但我宁愿让用户自己生成代理。
谢谢!丹尼尔