Dynamic Set Up the Web Reference Url To WebService
如何根据不同环境配置相关的WebService地址?
我想在开发时大家经常会遇到此类的问题,你们一般处理是怎样的。
一般操作恐怕就是
根据不同环境的对WebService的WebReferenceUrl
1.手工更新
2.删除现有的Reference,然后进行再次引用新的Ref Url
3.etc..
这样的话,有一处不是非常方便,就是需要人工每次进行干预。
我现在的思路:
针对WebService的WebReferenceURL进行配置化,来适合不同环境的所需。
嗯,下面针对项目实际场景进行演示
在服务层
- ADD WebRefence
- URL Behavior从Static选成Dynamic
- 增加动态获取配置的WebService Url的方法(只要加载到调用WebService的地方,即可)
/// <summary>
/// 服务实例单例类
/// </summary>
public partial class ServiceInstance {
/// <summary>
/// PMS-ICRS
/// </summary>
/// <returns></returns>
private static ICrs icrsInstance;
public static ICrs ICrsService {
get {
if ( icrsInstance == null ) {
GetUrlInAppConfig ( "ICrs" , "WebServiceUrl" ); <--如果不添加此语句,即WebService地址为当初默认添加的地址
icrsInstance = new ICrs ();
}
return icrsInstance;
}
}
/// <summary>
/// 动态获取配置的WebService Url
/// </summary>
/// <param name="propertyName">属性名称</param>
/// <param name="appName">AppSetting配置Key名称</param>
internal static void GetUrlInAppConfig (string propertyName , string appName) {
Settings.Default.Properties[propertyName].DefaultValue = ConfigurationManager.AppSettings[appName].ToString ();
Settings.Default.Save ();
Settings.Default.Reload ();
}
}
- 在表现层的Config的AppSetting处增加相关配置
<!--WebService Url-->
<add key="WebServiceUrl" value="http://XXXXXXXXXXXXXXX.asmx"/>
测试代码:
public class WebService {
private ICrs pmsWs;
/// <summary>
/// 获取ICrsService实例
/// </summary>
public WebService () {
pmsWs = ServiceInstance.ICrsService;
}
}
}
UI
public class UI{
public void InvokeWS(){
var target = new WebService (); <--此语句执行完之后,地址为:WebServiceUrl--即配置地址
string ID = "2011032";
string checkIn = "2010-07-12";
string checkOut = "2010-07-13";
var actual = target.GET( checkIn , checkOut , hotelID );
}
}
END
资料: