接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以 此加载这个地址来动态加载WebService呢?这样子就可以避免当WebService地址改变的时候,还要打开XAP包来重新修改 WebService配置的地址了。
答案当然是可以的。在这里,我制作了一个实例。
在前面一节里面,我们讲到了使用WebClIEnt来下载Silverlight程序外部的XML文件内容。在本节中,我们重点需要讲解一下如何使用反射来动态生成WebService代理类。关键代码如下:
public voID InitializeServices(string serviceAddress) { BasichttpBinding basicBinding = new BasichttpBinding();//创建BasichttpBinding绑定类 basicBinding.MaxBufferSize = 2147483647;//设置最大缓存字节 basicBinding.MaxReceivedMessageSize = 2147483647;//设置最大的接受消息缓存字节 CustomBinding binding = new CustomBinding(basicBinding); BindingElement binaryElement = new BinaryMessageEnCodingBindingElement(); EndpointAddress endPoint = new EndpointAddress(serviceAddress);//根据读取的外部XML指定的Webservice地址来实例化终结点地址。 WebServiceSoapClIEnt _LBControl = new WebServiceSoapClIEnt();//实例化WebService代理类 _LBControl = (WebServiceSoapClIEnt)Activator.CreateInstance(typeof(WebServiceSoapClIEnt), binding, endPoint);//使用反射来实例化我们需要指定的webService地址
当然以上只是关键性代码,我们在实践中还需要自己写一个WebService做测试,在本实例源代码程序中,我们在SLreadxml.Web项目中新建了一个WebService.asmx页面,此页面写了一个简单的WebService方法:
[WebMethod] public string HelloWorld() { return "Hello World For TestData"; }
然后我们右键点击SLreadxml项目名然后选择“添加服务引用”,在d出的窗口中,我填入SLreadxml.Web中 WebService.asmx页面的http地址。(注意这里的http以你自己的WebService地址为准,你可以重新架设一个网站目录或者IP 上。)http://localhost:1239/webService.asmx,然后点击“前进”,在这里创建好这个服务引用的代理类。并且命名此命名空间名为LBControl,然后我们需要在App.xaml.cs文件中引入以下命名空间:
using System.IO; using System.Xml; using System.windows.browser; using System.ServiceModel; using System.ServiceModel.Channels; using SLreadxml.LBControl;
当然System.ServiceModel域名空间还需要单独引用其DLL文件。在SLreadxml右键--“添加引用”。
另外想要WebService能够被访问到,还需要添加clIEntaccesspolicy.xml文件,此文件叙述了你可以安全的引用某一个网 站下的WebService.类似于安全许可吧。值得注意的是这个文件必须放在你的网站的根目录下面,那么你的这个WebService文件才能够被访问 到。不是虚拟目录的根目录,而是你网站的根目录。切记。
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>
好了。现在基本上已经可以实现动态的访问XML来动态的读取WebService地址。而不用每次都要去XAP包里面修改WebService地址了。那样太麻烦了。
最后给出Config.xml的源代码:
<configuration> <TestData>http://localhost:1239/webService.asmx</TestData> <Secdata>Secend Test Data</Secdata> </configuration>
本实例的源代码如下,点击请下载:SLReadXMLForWebService.rar 。
总结以上是内存溢出为你收集整理的2.Silverlight动态加载外部XML指定地址的WebService-(动态加载外部XML文件中指定的WebService地址)全部内容,希望文章能够帮你解决2.Silverlight动态加载外部XML指定地址的WebService-(动态加载外部XML文件中指定的WebService地址)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)