zoukankan      html  css  js  c++  java
  • 一起谈.NET技术,SilverLight调用WebService的方法 狼人:

      在我们添加Service Reference的时候,可能不知道该服务最终会被部署到什么位置,或者该服务可能被迁移,此时我们可以使用以下手段进行Service的调用,提高代码编写的灵活性。

      步骤1:修改宿主Web页面的代码,将服务地址以初始化参数方式传入。

    <form id="form1" runat="server" style="height:100%">
        
    <div id="silverlightControlHost">
            
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
              ...
              
    <param name="InitParams" value="serviceAddress=http://localhost/services/myservices.asmx" />
              
    <href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
                   
    <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
              
    </a>
            
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;0px;border:0px"></iframe></div>
        
    </form>

      步骤2:添加Service引用并注册调用远程方法的事件处理。

      添加Service的引用不必赘述.但此处添加Service Reference的目的仅在于获得远程方法的命名空间等程序结构信息。

      如果我们的Silverlight程序主页面名叫MainPage,则在MainPage.xaml.cs中添加如下代码:

           public void InitializeServices(string serviceAddress)
            {
                BasicHttpBinding basicBinding = new BasicHttpBinding();
                CustomBinding binding = new CustomBinding(basicBinding);
                BindingElement binaryElement = new BinaryMessageEncodingBindingElement();

                EndpointAddress endPoint = new EndpointAddress(serviceAddress);

                MyService.MyServicesSoapClient serviceClient = (MyServicesSoapClient)Activator.CreateInstance(typeof(MyServicesSoapClient), binding, endPoint);
                serviceClient.MyRemoteMethodCompleted += new EventHandler<MyService.MyRemoteMethodCompletedEventArgs>(serviceClient_MyRemoteMethodCompleted);
                serviceClient.MyRemoteMethodAsync();//调用远程方法
            }

      步骤3:修改App.xaml.cs,添加Application.Startup事件处理方法Application_Startup。

            private void Application_Startup(object sender, StartupEventArgs e)
            {
                
    this.RootVisual = new MainPage();
                
    string serviceAddress = e.InitParams["serviceAddress"].ToString();
                (this.RootVisual as MainPage).InitializeServices(serviceAddress);
            }

      OK,至此,我们已经实现了在程序启动时调用一个MyRemoteMethod方法。以上代码稍加改动,我们就可以在程序的任意位置以这种方式调用远程方法了。

      此方法对WCF Service的调用也有效,手段类似,实现略有不同。

  • 相关阅读:
    HDU 5642 King's Order 动态规划
    HDU 5640 King's Cake GCD
    HDU 5641 King's Phone 模拟
    HDU 5299 Circles Game 博弈论 暴力
    HDU 5294 Tricks Device 网络流 最短路
    HDU 5289 Assignment rmq
    HDU 5288 OO’s Sequence 水题
    星际争霸 虚空之遗 人族5BB 操作流程
    Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
    Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
  • 原文地址:https://www.cnblogs.com/waw/p/2162719.html
Copyright © 2011-2022 走看看