这个解决方案中包含两个项目,一个叫Server,另一个叫Client,天生一对。

1、启动VS 2010,推荐用2010以上版本(2012 RC版也行),因为越高版本越好用,最好Express的,不要钱,我天天用。

2、新建两个控制台项目,不用我教你了吧,建完后,你的VS应该和下图所示的差不多。

3、在“解决方案资源管理器”上,找到解决方案节点,在其上右击,从弹出的菜单中选择“属性”。

4、在弹出的窗口,在“启动项目”中选择“当前选定的内容”,如下图所示。

这样做,是为了在启动调试时更方便,你可以不设置。呵呵。

5、选中“Server”项目,不要弄错了,一般来说,我们是先完成服务器端。

在Server项目的“引用”上右击,从快捷菜单中选择“添加引用...”,在随后打开的窗口中,确认选定.NET选项卡,在列表中找到System.ServiceModel,然后,单击确定,这个不用我介绍了。

6、打开Server项目的Program.cs文件,首先,要引入几个可能要用到的命名空间。

  1. using System.ServiceModel;
  2. using System.ServiceModel.Description;

7、定义一个服务协定,其中包含一个TestMethod方法,服务协定是一个接口。

  1. [ServiceContract]
  2. public interface IService
  3. {
  4. [OperationContract]
  5. string TestMethod();
  6. }

我们看到,服务协定是一个接口,但附加了ServiceContractAttribute特性,而接口中的方法也附加了OperationContractAttribute特性,作为服务操作,可以供客户端程序调用,如果不加OperationContractAttribute特性,就不向客户端公开该方法。

8、定义一个类,并实现上面定义的服务协定。

  1. public class MyService : IService
  2. {
  3. public string TestMethod()
  4. {
  5. return "信春哥,考本科。";
  6. }
  7. }

9、在Main入口点中定义服务器相关的参数,并启动服务。

  1. static void Main(string[] args)
  2. {
  3. // 基址URI,必须,HTTP方案
  4. Uri baseURI = new Uri("http://localhost:8008/Service");
  5. using (ServiceHost host = new ServiceHost(typeof(MyService),baseURI))
  6. {
  7. // 向服务器添终结点
  8. WSHttpBinding binding = new WSHttpBinding();
  9. // 这里不需要安全验证
  10. binding.Security.Mode = SecurityMode.None;
  11. host.AddServiceEndpoint(typeof(IService), binding, "my");
  12. // 为了能让VS生成客户端代码,即WSDL文档,故要添加以下行为
  13. ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
  14. {
  15. HttpGetEnabled = true
  16. };
  17. host.Description.Behaviors.Add(mdBehavior);
  18. //如果服务顺利启动,则提示,处理Opened事件
  19. host.Opened += (sender, e) => Console.WriteLine("服务已启动。");
  20. // 启动服务器
  21. try
  22. {
  23. host.Open();
  24. }
  25. catch (Exception ex)
  26. {
  27. Console.WriteLine(ex.Message);
  28. }
  29. // 为了让程序不往下执行而结束,故加上这句
  30. Console.ReadKey();
  31. // 关闭服务器
  32. host.Close();
  33. }
  34. }

这时候,先确认Server项目是当前选定项目,然后运行,如果成功,你会看到如下图所示的内容。

好了,服务器端我们就完成了,下面轮到客户端。

这个就简单了,先找到Server所在的 \bin\debug 目录,运行Server.exe,确保服务成功启动。

选定Client项目,在“引用”上右击,从快捷菜单中选择“添加服务引用”

在弹出的窗口中输入刚才定义的基址,即http://localhost:8008/Service,记住,一定要用基址,就是创建ServiceHost实例时用的那个,不要用终结点地址。

单击“前往”按钮,服务读取正确后,输入你要的命名空间名字,单击确定。

这时候,我们就可以在客户端写代码了,

  1. static void Main(string[] args)
  2. {
  3. WS.ServiceClient client = new WS.ServiceClient();
  4. Console.WriteLine(client.TestMethod());
  5. Console.ReadKey();
  6. }

运行一下,我们的第一个WCF应用程序就完成了。

[转] 传说中的WCF的更多相关文章

  1. 传说中的WCF(12):服务器回调有啥用

    你说,服务器端回调有啥用呢?这样问,估计不好回答,是吧.不急,先讨论一个情景. 假设现有服务器端S,客户端A开始连接S并调用相关操作,其中有一个操作,在功能上有些特殊,调用后无法即时回复,因为在服务器 ...

  2. 传说中的WCF(11):会话(Session)

    在标题中我加了一个大家都很熟悉的单词——Session,熟吧?玩过Web开发的朋友肯定在梦中都会见到她. 在Web中为什么要会话呢?毕竟每个用户在一个Web应用中可能不止进行一次操作,比如,某二手飞机 ...

  3. 传说中的WCF(10):消息拦截与篡改

    我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过 程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过 ...

  4. 传说中的WCF(9):流与文件传输

    在使用Socket/TCP来传输文件,弄起来不仅会有些复杂,而且较经典的“粘包”问题有时候会让人火冒七丈.如果你不喜欢用Socket来传文件,不妨试试WCF,WCF的流模式传输还是相当强大和相当实用的 ...

  5. 传说中的WCF(8):玩转消息协定

    Message翻译成中文,相信各位不陌生,是啊,就是消息,在WCF中也有消息这玩意儿,不知道你怎么去理解它.反正俺的理解,就像我们互发短信一个道理,通讯的双方就是服务器与客户端,说白了吧,就是二者之间 ...

  6. 传说中的WCF(7):“单向”&“双向”

    在WCF中,服务器与客户端的通讯有单向(单工)和双向(双工)之分.要说有什么形式上的表现,那就是单向与双向生成的SOAP不同,咱们先放下代码不说.但通常情况下,我们也不太需要去研究生成的SOAP是啥样 ...

  7. 传说中的WCF(5):数据协定(a)

    在第4篇中,咱们了解了发送/接收SOAP头,从本篇开头,我们不妨更深入地去探求一下有关WCF中的消息到底是啥玩意儿.WCF庞大而复杂,而从 MSDN文档中,你会看到许多很专业很抽象的东西,你不禁会问, ...

  8. 传说中的WCF(4):发送和接收SOAP头

    如果你实在不明白Header是个啥玩意儿,你就想一想你发送电子邮件时,是不是有个叫“附件”的东东?对啊,那么SOAP头是不是可以理解为一种附加信息?就是附加到消息正文的内容. 消息正文又是啥?WCF除 ...

  9. 传说中的WCF(3):多个协定

    我们知道,WCF服务端是先定义服务协定,其实就是一个接口,然后通过实现接口来定义服务类.那么,有一个问题,如果一个服务类同时实现N个接口(也就是有N个协定)呢?结果会如何? 不必猜,我们还是通过实验来 ...

  10. 传说中的WCF(2):服务协定的那些事儿

    上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...

随机推荐

  1. [原创] 绿色单文件封装程序GreenOne V3.0

    1.原理 将包含可执行文件的多个文件 调用Winrar,创建自解压格式压缩文件 设置高级自解压选项中的文本和图标,设置解压后运行的文件为选中的可执行文件. 这种创建单文件封装其实也就是一个Winrar ...

  2. spring、spring mvc、mybatis框架整合基本知识

    学习了一个多月的框架知识了,这两天很想将它整合一下.网上看了很多整合案例,基本都是基于Eclipse的,但现在外面公司基本都在用Intellij IDEA了,所以结合所学知识,自己做了个总结,有不足之 ...

  3. oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)

    1. 相同字段上的多重索引   在Oracle 12c R1之前,一个字段是无法以任何形式拥有多个索引的.或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的. ...

  4. CSS完美实现iframe高度自适应(支持跨域)

    Iframe的强大功能偶就不多说了,它不但被开发人员经常运用,而且黑客们也常常使用它,总之用过的人知道它的强大之处,但是Iframe有个致命的"BUG"就是iframe的高度无法自 ...

  5. Python基本语法--语句

    # -*- coding: utf-8 -*- #条件语句 ''' if 判断条件: 执行语句…… else: 执行语句…… ''' flag = False name = 'python' if n ...

  6. Elasticsearch中的相似度模型(原文:Similarity in Elasticsearch)

    原文链接:https://www.elastic.co/blog/found-similarity-in-elasticsearch 原文 By Konrad Beiske 翻译 By 高家宝 译者按 ...

  7. 【Java SE】利用Java的for循环加random制作小学试卷

    前期介绍:很多同学以为学习一门编程语言,一定要学到很高深的时候才可以做项目,其实不然,很多时候我们不需要学到面向对象的思想,就可以从事一些小项目的开发,来增加自己对开发的热情,比如现在我就可以利用Ja ...

  8. JDFS:一款分布式文件管理实用程序第一篇(线程池、epoll、上传、下载)

    一 前言 截止目前,笔者在博客园上面已经发表了3篇关于网络下载的文章,这三篇博客实现了基于socket的http多线程远程断点下载实用程序.笔者打算在此基础上开发出一款分布式文件管理实用程序,截止目前 ...

  9. 在微信小程序中学习flex布局

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就 ...

  10. [大数据]-Logstash-5.3.1的安装导入数据到Elasticsearch5.3.1并配置同义词过滤

    阅读此文请先阅读上文:[大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置,前面介绍了ES,Kibana5.3.1的安装配置,以及IK分词的安装和同义词设置,这里主要记录L ...