轉(zhuǎn)帖|其它|編輯:郝浩|2011-02-11 13:34:44.000|閱讀 1356 次
概述:Silverlight可以加載外部的XML文件里面的內(nèi)容,那么我們可不可以在外部XML里面配置一個(gè)WebService地址,并且以此加載這個(gè)地址來(lái)動(dòng)態(tài)加載WebService呢?這樣子就可以避免當(dāng)WebService地址改變的時(shí)候,還要打開(kāi)XAP包來(lái)重新修改WebService配置的地址了。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Silverlight可以加載外部的XML文件里面的內(nèi)容,那么我們可不可以在外部XML里面配置一個(gè)WebService地址,并且以此加載這個(gè)地址來(lái)動(dòng)態(tài)加載WebService呢?這樣子就可以避免當(dāng)WebService地址改變的時(shí)候,還要打開(kāi)XAP包來(lái)重新修改WebService配置的地址了。
答案當(dāng)然是可以的。在這里,我制作了一個(gè)實(shí)例。
在前面一節(jié)里面,我們講到了使用WebClient來(lái)下載Silverlight程序外部的XML文件內(nèi)容。在本節(jié)中,我們重點(diǎn)需要講解一下如何使用反射來(lái)動(dòng)態(tài)生成WebService代理類。關(guān)鍵代碼如下:
public void InitializeServices(string serviceAddress)
{
BasicHttpBinding basicBinding = new BasicHttpBinding();//創(chuàng)建BasicHttpBinding綁定類
basicBinding.MaxBufferSize = 2147483647;//設(shè)置最大緩存字節(jié)
basicBinding.MaxReceivedMessageSize = 2147483647;//設(shè)置最大的接受消息緩存字節(jié)
CustomBinding binding = new CustomBinding(basicBinding);
BindingElement binaryElement = new BinaryMessageEncodingBindingElement();
EndpointAddress endPoint = new EndpointAddress(serviceAddress);//根據(jù)讀取的外部XML指定的Webservice地址來(lái)實(shí)例化終結(jié)點(diǎn)地址。
WebServiceSoapClient _LBControl = new WebServiceSoapClient();//實(shí)例化WebService代理類
_LBControl = (WebServiceSoapClient)Activator.CreateInstance(typeof
(WebServiceSoapClient), binding, endPoint);//使用反射來(lái)實(shí)例化我們需要指定的webService地址
當(dāng)然以上只是關(guān)鍵性代碼,我們?cè)趯?shí)踐中還需要自己寫(xiě)一個(gè)WebService做測(cè)試,在本實(shí)例源代碼程序中,我們?cè)赟LReadXML.Web項(xiàng)目中新建了一個(gè)WebService.asmx頁(yè)面,此頁(yè)面寫(xiě)了一個(gè)簡(jiǎn)單的WebService方法:
[WebMethod]
public string HelloWorld()
{
return "Hello World For TestData";
}
然后我們右鍵點(diǎn)擊SLReadXML項(xiàng)目名然后選擇“添加服務(wù)引用”,在彈出的窗口中,我填入SLReadXML.Web中WebService.asmx頁(yè)面的http地址。(注意這里的Http以你自己的WebService地址為準(zhǔn),你可以重新架設(shè)一個(gè)網(wǎng)站目錄或者IP上。)//localhost:1239/webService.asmx,然后點(diǎn)擊“前進(jìn)”,在這里創(chuàng)建好這個(gè)服務(wù)引用的代理類。并且命名此命名空間名為L(zhǎng)BControl,然后我們需要在App.xaml.cs文件中引入以下命名空間:
using System.IO;
using System.Xml;
using System.Windows.Browser;
using System.ServiceModel;
using System.ServiceModel.Channels;
using SLReadXML.LBControl;
當(dāng)然System.ServiceModel域名空間還需要單獨(dú)引用其DLL文件。在SLReadXML右鍵--“添加引用”。
另外想要WebService能夠被訪問(wèn)到,還需要添加clientaccesspolicy.xml文件,此文件敘述了你可以安全的引用某一個(gè)網(wǎng)站下的WebService.類似于安全許可吧。值得注意的是這個(gè)文件必須放在你的網(wǎng)站的根目錄下面,那么你的這個(gè)WebService文件才能夠被訪問(wèn)到。不是虛擬目錄的根目錄,而是你網(wǎng)站的根目錄。切記。
clientaccesspolicy.xml源代碼:
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
好了。現(xiàn)在基本上已經(jīng)可以實(shí)現(xiàn)動(dòng)態(tài)的訪問(wèn)XML來(lái)動(dòng)態(tài)的讀取WebService地址。而不用每次都要去XAP包里面修改WebService地址了。那樣太麻煩了。
最后給出Config.xml的源代碼:
1 <configuration>
2 <TestData>//localhost:1239/webService.asmx</TestData>
3 <SecData>Secend Test Data</SecData>
4 </configuration>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載