在里调用 web service的时候默认生成的代理类的URL行为是使用静态值如果web 服务进行转移那就有可能会出现不能访问的情况需要对Web服务重新引用生成新的代理类这对程序部署带来许多不便解决办法就是设置URL行为使用动态值对于许多人没有去关注所以可能都不知道有这一项功能包括我以前的同事因此写了这篇文章对一些朋友提供些许帮助当然最好的说明还是通过实例
比如原先的web service在上在对web service进行修改后部署到企业内部的另一台电脑上 IP为
选中引用该Web服务的解决方案中Web References下的节点(这里ServerFileManager为文件夹名称)列出下面的属性
URL //localhost/RedManager/Web References/ServerFileManager/
URL行为静态
Web 引用 URL
文件夹名称ServerFileManager
这里需要通过修改新的IP地址为重新进行编译才能再次正确调用原来的服务
查看代理类的生成的构造函数如下
public UpLoadFileService()
{
thisUrl = ;
}
上面就是问题所在都被写死在里面了
下面是解决办法
修?腢RL行为值为动态webConfig中会添加下面配置信息
<appSettings>
<add key=RedManagerServerFileManagerUpLoadFileService value=/>
</appSettings>
再来看看服务代理类的构造函数有什么变化
public UpLoadFileService()
{
string urlSetting = SystemConfigurationConfigurationSettingsAppSettings[RedManagerServerFileManagerUpLoadFileService];
if ((urlSetting != null))
{
thisUrl = stringConcat(urlSetting );
}
else
{
thisUrl = ;
}
}
自此我们可以通过修改nfig配置文件中的配置信息而不需要重新编译代码来调整程序
如果使用命令行可以通过Web 服务描述语言工具 (Wsdlexe)来实现
Wsdlexe /urlkey: RedManagerServerFileManagerUpLoadFileService
或者
Wsdlexe /appsettingurlkey: RedManagerServerFileManagerUpLoadFileService
从上面看到在配置文件中<appSettings>下添加了<add key= value= />个人感觉实现更好的方式是使用专门的元素节点来包括这些信息不和appSettings下的其他信息混合就 framework中的数据库连接字符串一样有专门的设置本文参考《MicrosoftNET程序设计技术内幕》