我正在开发一款WCF应用程序,将在多个服务器上部署,我希望不必每次部署时都记得更改app.config文件。起初,我的app.config配置文件中的serviceModel部分如下所示:
所以,我可以在app.config中像这样更改httpGetUrl:
<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包含了仍然指向本地主机的绝对路径:
<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 文件中手动设置地址。
有没有办法:
- 让 WSDL 包含所有内容,以便不需要导入任何东西?
- 在 WSDL 导入语句中使用相对路径?
如果有其他建议,将不胜感激。我有两个开发服务器需要自动化部署,但就是因为这个 WSDL 问题才不能实现。
既然这只是为了生成代理,我想我可以自己生成代理并分发,但我更想让用户自己生成代理。
谢谢! Daniel