在項目中添加引用webservice是相對固定的,當webservice更換地址後需要將整個項目重新添加webservice引用,而動態配置則可以在webservice地址發生改變時只改動配置文件即可實現整個項目的webservice的引用的地址的更改,方便了操作。特別是在程序開發測試階段,可以先用本機的webservice測試,在測試成功後再發布到服務器上。具體的實現步驟如下:
1、添加本機的webservice引用
添加後的圖片:
在由引用webservice後,雙擊既可看到系統自動添加的代碼,如:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="GlobalWeatherSoap", Namespace="http://www.webserviceX.NET")]
public partial class GlobalWeather : System.Web.Services.Protocols.SoapHttpClientProtocol {
/// <remarks/>
public GlobalWeather() {
this.Url = "http://www.webservicex.net/globalweather.asmx";
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="GlobalWeatherSoap", Namespace="http://www.webserviceX.NET")]
public partial class GlobalWeather : System.Web.Services.Protocols.SoapHttpClientProtocol {
/// <remarks/>
public GlobalWeather() {
this.Url = "http://www.webservicex.net/globalweather.asmx";
}
}
動態引用webservice就是繼承系統自動添加的引用,並且將其中的url換位參數傳遞,默認的沒有參數的就是調用引用時的代碼,在更換webservice地址後需要引用帶參數的相應的函數,這樣既可以直接調試我們的系統,又可以在webservice地址發生改變時加以轉換。
2、生成動態引用的繼承類
需要引用的單元:
[csharp]
using System.Diagnostics;
using System.ComponentModel;
using System.Web.Services;
using System.Diagnostics;
using System.ComponentModel;
using System.Web.Services;
需要生成的繼承類:
[csharp]
/// <summary>
/// 動態引用webservice
/// </summary>
[DebuggerStepThrough(), DesignerCategory("code"), WebServiceBinding(Name = "", Namespace = "")]
class Dyn_Weather : WeatherService.GlobalWeather
{
internal Dyn_Weather()
: base()
{
this.Url = "http://www.webservicex.net/globalweather.asmx";
}
internal Dyn_Weather(string ip) //帶參數的構造函數,www.2cto.com在調用時制定ip地址
: base()
{
this.Url=string.Format("http://{0}/globalweather.asmx",ip);
}
}
/// <summary>
/// 動態引用webservice
/// </summary>
[DebuggerStepThrough(), DesignerCategory("code"), WebServiceBinding(Name = "", Namespace = "")]
class Dyn_Weather : WeatherService.GlobalWeather
{
internal Dyn_Weather()
: base()
{
this.Url = "http://www.webservicex.net/globalweather.asmx";
}
internal Dyn_Weather(string ip) //帶參數的構造函數,在調用時制定ip地址
: base()
{
this.Url=string.Format("http://{0}/globalweather.asmx",ip);
}
}
3、調用動態webservice
[csharp]
Dyn_Weather dy = new Dyn_Weather("192.168.1.10");//制定webservice的ip地址
lblDeviceid.Text =dy.GetWeather("beijing", "china").ToString();
Dyn_Weather dy = new Dyn_Weather("192.168.1.10");//制定webservice的ip地址
lblDeviceid.Text =dy.GetWeather("beijing", "china").ToString();
這樣只需在構造函數時制定webservice服務的ip地址就可以實現webservice的動態配置,對於項目開發帶來了方便性。
摘自#Define