|
網(wǎng)絡(luò)上設(shè)置Silverlight動(dòng)態(tài)訪問(wèn)WCF服務(wù),大多是拋開(kāi)ServiceReferences.ClientConfig文件,完全以代碼方式實(shí)現(xiàn)對(duì)WCF的動(dòng)態(tài)訪問(wèn)。但這種做法存在實(shí)現(xiàn)復(fù)雜和局限性。在實(shí)際使用的過(guò)程中,出于安全等原因,很多時(shí)候需要通過(guò)自定義綁定,設(shè)置很多內(nèi)容。通過(guò)VS中的向?qū)蒘ilverlight對(duì)WCF的訪問(wèn),能夠自動(dòng)識(shí)別這些內(nèi)容,并自動(dòng)生成ServiceReferences.ClientConfig文件,簡(jiǎn)單地實(shí)現(xiàn)對(duì)服務(wù)的訪問(wèn),但手動(dòng)通過(guò)代碼實(shí)現(xiàn)這些綁定,顯然難度比VS向?qū)Х绞酱罅撕芏啵乙坏┓?wù)的綁定等發(fā)生變化,Silverlight端代碼的修改也非常麻煩。
我們知道,WCF服務(wù)是通過(guò)ABC三種要素進(jìn)行設(shè)置的,VS向?qū)茏詣?dòng)生成ABC三種要素。程序部署到服務(wù)器上,唯一變化的就是A——地址。因此,通過(guò)一定的方式,依托自動(dòng)生成的配置文件,只是動(dòng)態(tài)地修改A,顯然是最簡(jiǎn)單的方式。
程序在開(kāi)發(fā)環(huán)境和部署到服務(wù)器上時(shí),主要會(huì)面臨兩種情況:
1、Silverlight始終以一個(gè)固定的服務(wù)器地址訪問(wèn)WCF服務(wù),例如,其中一個(gè)服務(wù)的地址是http://myServices.com/MyService.svc。
2、服務(wù)器提供公網(wǎng)和局域網(wǎng)兩種訪問(wèn)方式,WCF服務(wù)和承載Silverlight的Web程序在同一個(gè)站點(diǎn)上,兩者可能在同一個(gè)Web程序中,也可能是兩個(gè)不同的程序。例如,在局域網(wǎng)中,分別是http://192.168.1.4/myServices/myService.svc和http://192.168.1.4/webUI/aaa.ASPx。在公網(wǎng)中,又分別是http://Mytest.com/myServices/myService.svc和http://Mytest.com/webUI/aaa.ASPx。
顯然,兩種情況需要不同的處理方式。為了同時(shí)滿足兩種情況,可以使用下面的方式進(jìn)行處理。
1、Web程序端
對(duì)于第一種情況,由于Silverlight的配置文件都打包在xap文件中,因此可以通過(guò)承載Silverlight的Web程序?yàn)槠鋫鬟f服務(wù)地址,這個(gè)地址最好的存放處就是Web程序的web.config文件。例如在web.config的appSettings節(jié)中增加一個(gè)鍵值對(duì)<add key="WcfServiceAddress" value="http://myServices.com"/>。然后在承載Silverlighgt的ASPx頁(yè)面文件中調(diào)用Silverlight處,增加下面的內(nèi)容:
<param name="InitParams" value='WcfServiceAddress=<%= System.Configuration.ConfigurationManager.AppSettings["WcfServiceAddress"] %>' />
NET技術(shù):Silverlight3動(dòng)態(tài)訪問(wèn)wcf,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。