Silverlight中動態(tài)獲取Web Service地址
更新時間:2009年11月24日 18:47:24 作者:
開發(fā)過Silverlight應(yīng)用的朋友們相信都會遇到這樣一個問題
在使用WCF或者WS進(jìn)行數(shù)據(jù)庫操作的時候都需要有一個明確的服務(wù)地址,如果是WCF就是svc文件地址。初學(xué)者通常會直接使用VS的Add Service Reference來添加引用。這的確是十分方便的手段,但是這樣會帶來什么樣的麻煩呢?
第一,在開發(fā)的階段一旦改變了WS文件的目錄結(jié)構(gòu)就必須改變SL工程中的WS地址,而且這種改變并不是單純的Update Service Reference這么簡單,因?yàn)榈刂芬呀?jīng)改變了,你必須刪掉舊的Reference來添加新的Reference,這是其一。
第二, 當(dāng)項(xiàng)目開發(fā)完成要部署上去服務(wù)器時大問題就來了。如果在開發(fā)的時候是用VS的Add Service Reference來添加引用的話,系統(tǒng)會自動生成一個ServiceReferences.ClientConfig的配置文件,里面記錄著WS的地址和緩存、連接時長之類的信息,要命的是這個配置文件是連同SL工程一并打包進(jìn)xap文件里面的,也就是說一旦項(xiàng)目部署到了服務(wù)器上之后就不能再改WS的地址了。這對項(xiàng)目的遷移,服務(wù)器IP地址的變動都帶來十分不利的影響。
這里介紹一種動態(tài)獲取WS地址的方法,這種方法不依賴于 ServiceReferences.ClientConfig文件。雖然說不依賴于配置文件,但是開發(fā)者仍然需要使用VS的Add Service Reference來添加一次引用,用于生成SL端的操作代碼。好了,進(jìn)入正題,下面是用于生成WSClient的類
public class ServiceUtil
{
public static string SVCPath { set; get; }
/// <summary>
/// Get Data Service path
/// </summary>
/// <returns>path</returns>
public static WorkflowServiceClient GetDynamicClient()
{
if (SVCPath == null)
throw new Exception("Wrong SVC Path!");
BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;
return new WorkflowServiceClient(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, SVCPath)));
}
}
上面ServiceUtil類中有一個靜態(tài)的字符串變量,用來保存WS文件路徑;然后下面的GetDynamicClient方法就是把SL應(yīng)用的宿主網(wǎng)站uri與WS文件路徑組合起來形成完整的WS引用URL。這里這個靜態(tài)變量SVCPath通常是在使用WS操作前賦值,而具體的值可以通過網(wǎng)站W(wǎng)eb.config文件的appsetting中字段中傳過來,至于怎么在SL工程中獲取aspx頁面的參數(shù)的問題,我在上一篇隨筆中有寫到,大家可以參考一下。
第一,在開發(fā)的階段一旦改變了WS文件的目錄結(jié)構(gòu)就必須改變SL工程中的WS地址,而且這種改變并不是單純的Update Service Reference這么簡單,因?yàn)榈刂芬呀?jīng)改變了,你必須刪掉舊的Reference來添加新的Reference,這是其一。
第二, 當(dāng)項(xiàng)目開發(fā)完成要部署上去服務(wù)器時大問題就來了。如果在開發(fā)的時候是用VS的Add Service Reference來添加引用的話,系統(tǒng)會自動生成一個ServiceReferences.ClientConfig的配置文件,里面記錄著WS的地址和緩存、連接時長之類的信息,要命的是這個配置文件是連同SL工程一并打包進(jìn)xap文件里面的,也就是說一旦項(xiàng)目部署到了服務(wù)器上之后就不能再改WS的地址了。這對項(xiàng)目的遷移,服務(wù)器IP地址的變動都帶來十分不利的影響。
這里介紹一種動態(tài)獲取WS地址的方法,這種方法不依賴于 ServiceReferences.ClientConfig文件。雖然說不依賴于配置文件,但是開發(fā)者仍然需要使用VS的Add Service Reference來添加一次引用,用于生成SL端的操作代碼。好了,進(jìn)入正題,下面是用于生成WSClient的類
復(fù)制代碼 代碼如下:
public class ServiceUtil
{
public static string SVCPath { set; get; }
/// <summary>
/// Get Data Service path
/// </summary>
/// <returns>path</returns>
public static WorkflowServiceClient GetDynamicClient()
{
if (SVCPath == null)
throw new Exception("Wrong SVC Path!");
BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;
return new WorkflowServiceClient(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, SVCPath)));
}
}
上面ServiceUtil類中有一個靜態(tài)的字符串變量,用來保存WS文件路徑;然后下面的GetDynamicClient方法就是把SL應(yīng)用的宿主網(wǎng)站uri與WS文件路徑組合起來形成完整的WS引用URL。這里這個靜態(tài)變量SVCPath通常是在使用WS操作前賦值,而具體的值可以通過網(wǎng)站W(wǎng)eb.config文件的appsetting中字段中傳過來,至于怎么在SL工程中獲取aspx頁面的參數(shù)的問題,我在上一篇隨筆中有寫到,大家可以參考一下。
相關(guān)文章
asp.net 身份驗(yàn)證機(jī)制實(shí)例代碼
對于ASP.NET驗(yàn)證機(jī)制在項(xiàng)目開發(fā)中運(yùn)用,會使項(xiàng)目非常方便快捷的實(shí)現(xiàn)頁面的訪問權(quán)限問題,而且省去了一些沒必要的安全問題2012-06-06asp.net使用Socket.Send發(fā)送信息及Socket.SendFile傳輸文件的方法
這篇文章主要介紹了asp.net使用Socket.Send發(fā)送信息及Socket.SendFile傳輸文件的方法,結(jié)合實(shí)例形式分析了asp.net基于socket實(shí)現(xiàn)信息與文件傳輸?shù)南嚓P(guān)技巧,需要的朋友可以參考下2016-06-06asp.net中ListBox 綁定多個選項(xiàng)為選中及刪除實(shí)現(xiàn)方法
文章介紹了關(guān)于在asp.net中的listbox的綁定多個選項(xiàng)和同時選中多個選項(xiàng)以及刪除多個選項(xiàng)的方法2012-04-04asp.net Urlrewriter在虛擬主機(jī)上的使用方法
在網(wǎng)上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle Server.Transfer的方法。其實(shí)這種方法是錯誤的。2009-12-12VB.NET驗(yàn)證郵件地址的合法性實(shí)現(xiàn)代碼
現(xiàn)在,對于用戶在Web頁面上或電話中給出的Email地址,我們越來越不敢肯定它是否真的有效。在今天這個垃圾郵件泛濫成災(zāi)的年代,人們完全有理由舍不得輕易透露Email地址。2011-04-04ASP.NET簡化編輯界面解決思路及實(shí)現(xiàn)代碼
簡化用戶操作界面,添加功能一般沒法簡化,但是如果是在GridView做顯示,編輯,更新與刪除,會讓用戶在編輯,需要點(diǎn)擊編輯銨鈕,再進(jìn)行編輯,或是取消編輯,下面是改進(jìn)的方法做了演示動畫,感興趣的朋友可以了解下2013-01-01asp.net+ajaxfileupload.js 實(shí)現(xiàn)文件異步上傳代碼分享
本文給大家分享一段asp.net基于ajaxfileupload.js實(shí)現(xiàn)文件異步上傳的代碼,本人項(xiàng)目中已經(jīng)在使用的代碼,小伙伴們可以直接移植到自己的項(xiàng)目中去。2014-11-11