zoukankan      html  css  js  c++  java
  • WCF 一步一步 编写访问 WCF服务 的客户端程序

    通过前面的几节内容我们知道了发布WCF的几种方式,下面我们要来编写一个客户端来访问我们发布的WCF服务。

    首先我们打开一个之前建立好的WCF服务程序,我的WPF服务程序还没有关闭,就使用他吧。

    为这个解决方案添加一个项目,这里我添加了一个Silverlight 3 应用程序。

    image

    当然,你也可以选择控制台程序、WinForm、ASP.NET中的任何一个,甚至还可以是其它语言的应用程序,如:JavaEE等。

    我们都知道,在VS2008 SP1 Silverlight Tool 3 隐藏了图形设计,将这个界面设计的功能放到了Blend 当中,这个可以理解,Expression 是强大的设计工具。

    那么在这里你可以手动编写XAML,或者用Blend 编辑Silverlight 项目,拖动两个控件上来并添加事件。

    <Grid x:Name="LayoutRoot">
            <dataInput:Label x:Name="txtResponse" HorizontalAlignment="Left" Margin="61,152,0,0" VerticalAlignment="Top" Height="31" Width="191"/>
            <Button Click="Button_Click" x:Name="btnRequest" Height="37" HorizontalAlignment="Left" Margin="37,73,0,0" VerticalAlignment="Top" Width="110" Content="调用"/>
        </Grid>

    添加服务引用

    image

    在地址栏中输入,我们配置好的提供服务地址,点击前往,会到上面的地址中去下载WCF服务的元数据,根据接收到的元数据信息,在“服务”列表中显示出该地址中相应的服务。  如下图

    image

    输入一个简明有意义的命名空间,这里我用默认。

    点击完成,在“解决方案管理器”中我们可以看到添加完服务引用后的项目。它会自动为我们添加System.ServiceModel、System.Runtime.Serialization两个本地引用和一个WCF服务引用。

    image

    还有多了一个 ServiceReferences.ClientConfig 文件

    image 

    里面的内容是这个WCF服务的配置信息

    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647"
                        maxReceivedMessageSize="2147483647">
                        <security mode="None">
                            <transport>
                                <extendedProtectionPolicy policyEnforcement="Never" />
                            </transport>
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://pcserver:8008/service/basic" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                    name="BasicHttpBinding_IService1" />
            </client>
        </system.serviceModel>
    </configuration>

    右击服务引用,选择“在对象浏览器中查看”,会在对象浏览器中显示出该服务引用的元数据结构。

    image

    我们看到,在方法栏目里面有很多事件和方法名称带有Async后缀的方法,这是为了支持Silverlight 异步通信而自动生成的,对于Silverlight使用服务,是会默认生成异步的,

    image

    编写Web端的RIA程序,异步的调用是必须的,对于网络传输不确定性很多,如果同步很可能出现假死状态,而异步会解决这个问题,Ajax就是异步的通信。

    下面我们编写后台代码

    namespace SilverlightApplication1
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //实例化Service1Client,它是访问WCF服务的代理类。
                //可以指定终结点名称,使用哪一种配置方式,也可以什么都不写,使用默认的,在这里咱们演示可以配置的方式,写入一个终结点的名字,如下面的图,如果你在此之前没有给终结点设置名字,那么久需要设置完服务的终结点之后,更新一下客户端的引用
                ServiceReference1.Service1Client client = new SilverlightApplication1.ServiceReference1.Service1Client("endpoint1");

                //指定异步GetData完成后要执行的回调方法。
                client.GetDataCompleted += new EventHandler<SilverlightApplication1.ServiceReference1.GetDataCompletedEventArgs>(client_GetDataCompleted);
                //通过代理类,调用异步
                client.GetDataAsync(8);

            }

            void client_GetDataCompleted(object sender, SilverlightApplication1.ServiceReference1.GetDataCompletedEventArgs e)
            {
                //通过e.Result 获得返回结果
                txtResponse.Content = e.Result;

            }

        }
    }

    设置服务端配置终结点的名字为endpoint1

    image

    更新客户端的引用

    image

    到这里我遇到了跨域的问题,我会在后面的时间里解决这个问题,但是如果你的客户端不是使用Silverlight,而是WPF,WinFrom,Asp.Net  都不会出现这个问题,唯独Silverlight。

    如果你使用了Silverlight 而你的客户端是部署在特定的服务端口上,那么这个端口,只能限制使用4502~4534之间的端口号码,然后在943端口上开启一个服务,里为Silverlight客户端提供策略文件的配置信息

    冯瑞涛
  • 相关阅读:
    Oracle 存储过程_(收集)
    Oracle job procedure 存储过程定时任务(转自hoojo)
    windows环境下,Jenkins的安装和基础配置
    如何使用IntelliJ IDEA 配置Maven
    在IntelliJ IDEA中安装Junit,TestNG
    JAVA 操作 properties 配置文件
    Java语法----Java中equals和==的区别(转载)
    由于网页点击速度过快,导致selenium无法定位到元素的问题
    使用IntelliJ idea运行selenium3.0
    selenium webdriver java环境配置
  • 原文地址:https://www.cnblogs.com/finehappy/p/1654983.html
Copyright © 2011-2022 走看看