• Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService(动态加载外部XML文件中指定的WebService地址)


    接上节所讲的,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项目名然后选择“添加服务引用”,在弹出的窗口中,我填入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的源代码:

    1 <configuration>
    2     <TestData>http://localhost:1239/webService.asmx</TestData>
    3     <SecData>Secend Test Data</SecData>
    4 </configuration>

          本实例的源代码如下,点击请下载:SLReadXMLForWebService.rar 。

  • 相关阅读:
    所谓瓶颈
    世界那么Big,组件那么Small
    PHPUnit单元测试中类protected/private方法测试
    WCF:如何将net.tcp协议寄宿到IIS
    Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security
    Windows 服务入门指南
    Visual studio 能否定位打开文件在项目中的位置
    电商框架调研
    可伸缩性/可扩展性(Scalable/scalability)
    LoadRunner基础入门教程
  • 原文地址:https://www.cnblogs.com/Areas/p/2193349.html
Copyright © 2020-2023  润新知