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
image 
  
  • 增加动态获取配置的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

资料:

http://www.codeproject.com/KB/XML/wsdldynamicurl.aspx

posted @ 2010-07-12 16:27  RicoRui  阅读(754)  评论(4编辑  收藏  举报