从此节开始,我们要开始WCF通讯了。

本游戏的只是基于WCF最基础的应用,没有WCF深奥的知识,相关的深奥知识请关注专业的WCF系列文章。

我们先来实现一个Silverlight里调用Hellow的尝试:

我们新建一个新的Silverlight应用程序:文件->新建->项目->Silverlight应用程序->Hellow

建立后就一个Hellow应用程序和一个Helow.web的Web应用程序。

一:我们将WCF集成在Web应用程序中

我们对着Web应用程序右键-》添加->新建项->WCF服务-》起名:Service.svc

回车后,默认生成IService.cs接口和Service.svc/Service.svc.cs文件

我们看一下自动生成的代码:

 [ServiceContract]
    public interface IService
    {
        [OperationContract]
        void DoWork();

[OperationContract]
        string SayHello(string name);//这个是我加的
    }

看下代码分析:

接口标识:[ServiceContract],

接口头顶上多了一个特性,翻译一下就叫“服务契约”,当初刚看WCF的webcast时,一听契约,迷糊了,这名字也扩鬼义了。

方法名标识:[OperationContract]

其实就是一些特性,用于微软内部反射的一个标识,看见不同名称干点不同的事。

当然了,除了接口,方法,还有实体类,和成员标识:

实体类契约:[DataContract]--有点神奇的是,我刚发现我的实体类里有一个忘了写这个,竟然也一直成功的运行到现在。

属性:[DataMember]

    /// <summary>
    /// 游戏玩家
    /// </summary>
    [DataContract]
    public class Player
    {
        /// <summary>
        /// 玩家ID
        /// </summary>
        [DataMember]
        public Guid ID
        {
            get;
            set;
        }
    }

OK,现在我们回去实现上面我新加的那个SayHello接口方法,其实就是返回“Hello:加名字“;

 public class Service : IService
    {
        public void DoWork()
        {

}

#region IService 成员

public string SayHello(string name)
        {
            return "Hello:" + name;
        }

#endregion
    }

好了,WCF的代码到此就写完了,和webservice差不多吧,既然差不多,那就用和webservice一样,我们到Silverlight应用程序中引用这个WCF。

对着Silverlight的“引用”右键-》添加服务引用-》出来对话框后点"发现(D)":

再点一下那个Service。svc,出来看见那个Service和IService就说明正确了。

接着我们改下命名空间,改成HellowService。

确认之后,自动生成Service References文件夹及ServiceReferences.ClientConfig文件。

接下来,我们要开始调用WCF的方法了。

回到Silverlight应用程序的MainPage里,拉入一个TextBox,一个TextBlock,一个button

<Grid x:Name="LayoutRoot" Background="White">
        <Button Content="WCF 调用" Height="23" HorizontalAlignment="Left" Margin="84,111,0,0" Name="btnCallWCF" VerticalAlignment="Top" Width="75" Click="btnCallWCF_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="84,71,0,0" Name="txtName" VerticalAlignment="Top" Width="120" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="228,71,0,0" Name="tbMsg" Text="显示的内容" VerticalAlignment="Top" />
    </Grid>

改完几个Name之后,双击Button进去事件。敲入以下代码:

private void btnCallWCF_Click(object sender, RoutedEventArgs e)
        {
            Binding binding = new BasicHttpBinding();
            EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/Service.svc");
            HellowService.ServiceClient client = new HellowService.ServiceClient(binding, endPoint);
            client.SayHelloCompleted += new EventHandler<HellowService.SayHelloCompletedEventArgs>(client_SayHelloCompleted);
            client.SayHelloAsync(txtName.Text);
        }

void client_SayHelloCompleted(object sender, HellowService.SayHelloCompletedEventArgs e)
        {
            tbMsg.Text = e.Result;
        }

这里说一下:

第一行:Binding binding =new BasicHttpBinding(); --》绑定通讯方式,这里是BasicHttp方式,基础的http请求方式。像这一类的方式有N种,10种左右。说明微软的支持是相当的强大的。

第二行:EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/Service.svc");--》指定SVC的路径,要不然找不到路径调用了。这里我们用了固定端口12345。

如果要固定端口,这里需要配置一下Hellow.Web项目的属性:

然后打开ServiceReferences.ClientConfig,把特定端口号也改成12345。

第三行:调用方法完成后的回调事件

第四行,异步调用SayHello方法。

说明:所有WCF的方法调用都是异步的,所以总是伴有回调函数。

对于WCF,用的最多的就是事件和委托了,这两点不熟悉的大伙子们,要赶紧补补课啦。

一切就绪,F5运行,出来如下窗口:

输入名称:路过秋天,点击调用,正常回来消息了。

说明,第一步的WCF调用已经成功了。

大伙在试的时候要悠着点,不然很容易就出现各种各样的问题

下节我们讲将WCF独立出来一个项目,不放在Hellow.Web上,由于独立出来,所以会用另一个端口,

对于端口不同产生的跨域问题,也顺手解决。

这里提供源下载:点击下载

转载于:https://www.cnblogs.com/cyq1162/archive/2010/07/12/1775864.html

Silverlight+WCF 新手实例 象棋 WCF通讯基础(十四)相关推荐

  1. Silverlight+WCF 新手实例 象棋 WCF通讯跨域(十五)

    这节我们把WCF独立一个服务出来,不寄放在Web应用程序中. 我们再开一个项目来讲解,上节名称叫Hellow,这节名称起World: 文件->新建->项目->Silverlight应 ...

  2. Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 本节完后,同时会更新Silverlight+WCF 新手实例 象棋 专题索引,并顺路提供第八阶段源码 在Silverlight+ ...

  3. Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界 ...

  4. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三) 本节连着Silverlight+WC ...

  5. Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区- ...

  6. Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上上一节,就是二十八节:Silverlight+WCF ...

  7. Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 还是那张图: 本节实现返回大厅和退出系统: 一:返回大厅,其实很简单的说,就是转向房间列表了. 可是,转向前也有很多事情要处理的 ...

  8. Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)

    在线演示地址: Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)中,我们实现了用户的棋谱回放,在文章的下面,我们 ...

  9. Silverlight+WCF 新手实例 象棋 棋子移动-规则[附加上半盘限制](十)

    上上一节,我们对棋子的下半盘棋子做了所有的规则限制,因为我们下棋的总是用下半盘的棋子来下,总没人用上半盘棋来下那么高境界的吧. 不过这节简单追加点代码,让那些企图高境界的人士可以临时性的自己和自己下. ...

  10. Silverlight+WCF 新手实例 象棋 棋盘(二)

    2019独角兽企业重金招聘Python工程师标准>>> 1.先新建一个和棋子相关的类库 打开VS2010后->新建->项目->Silverlight类库,名称就定为 ...

最新文章

  1. 2021贝叶斯数据分析-原作者开课啦!
  2. java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable
  3. 在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(基础知识以及简单示例)...
  4. mysql第二章_第二章 初识MySQL
  5. JS-面向对象---属性的特性 / 修改属性的特性
  6. 1w用户的并发量多大_QQ邮件订阅中心下线:卢松松博客曾经有1W多订阅用户
  7. “假冒上市”公司再甩锅:我被服务商给骗了
  8. bbsmax mysql_MySQL中自己不太常用的命令
  9. 青岛自然人税收管理系统服务器地址,青岛市自然人税收管理系统扣缴客户端
  10. 「微信小程序」有哪些冲击与机会?
  11. 敏捷开发之道(六)计划(续)
  12. 白鹭引擎 android9,【安卓】手把手教你Egret引擎一键发布华为快游戏
  13. win10计算机系统优化设置,win10加速优化的方法是什么_windows10优化设置的方法
  14. php header 转向,php使用header函数的http头设置大全(包含301转向及404状态)
  15. 常用计算机字体的后缀名是,自考计算机应用基础试题及参考答案
  16. java马士兵笔记_马士兵java教程笔记2
  17. Cy3花青素荧光染料,(CAS:146368-13-0 )
  18. 遇见的Unity疑难杂症汇总(个人积累)
  19. oracle闪回技术详解之闪回drop(神奇的flashback)
  20. 伺服电机原点位置在运行一段时间后发生偏移

热门文章

  1. 什么是通讯作者?和第一作者的区别有哪些?
  2. 【论文笔记】Learning Deep Face Representation
  3. pandasql库学习使用之在Python中执行SQL语句
  4. python数据分析用什么框架_用python选择用于内存大的数据分析的框架
  5. 微信小程序云开发教程-微信小程序的JS高级-页面间数据传递
  6. exls下载后显示jsp_jsp笔记
  7. 基于springboot的物资管理系统
  8. 基于SSM的猫头鹰轻博客系统
  9. 第九章 (一)动态规划
  10. c语言 博客园,C语言l|博客园作业10