[转] 传说中的WCF
这个解决方案中包含两个项目,一个叫Server,另一个叫Client,天生一对。
1、启动VS 2010,推荐用2010以上版本(2012 RC版也行),因为越高版本越好用,最好Express的,不要钱,我天天用。
2、新建两个控制台项目,不用我教你了吧,建完后,你的VS应该和下图所示的差不多。

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

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

这样做,是为了在启动调试时更方便,你可以不设置。呵呵。
5、选中“Server”项目,不要弄错了,一般来说,我们是先完成服务器端。
在Server项目的“引用”上右击,从快捷菜单中选择“添加引用...”,在随后打开的窗口中,确认选定.NET选项卡,在列表中找到System.ServiceModel,然后,单击确定,这个不用我介绍了。

6、打开Server项目的Program.cs文件,首先,要引入几个可能要用到的命名空间。
- using System.ServiceModel;
- using System.ServiceModel.Description;
7、定义一个服务协定,其中包含一个TestMethod方法,服务协定是一个接口。
- [ServiceContract]
- public interface IService
- {
- [OperationContract]
- string TestMethod();
- }
我们看到,服务协定是一个接口,但附加了ServiceContractAttribute特性,而接口中的方法也附加了OperationContractAttribute特性,作为服务操作,可以供客户端程序调用,如果不加OperationContractAttribute特性,就不向客户端公开该方法。
8、定义一个类,并实现上面定义的服务协定。
- public class MyService : IService
- {
- public string TestMethod()
- {
- return "信春哥,考本科。";
- }
- }
9、在Main入口点中定义服务器相关的参数,并启动服务。
- static void Main(string[] args)
- {
- // 基址URI,必须,HTTP方案
- Uri baseURI = new Uri("http://localhost:8008/Service");
- using (ServiceHost host = new ServiceHost(typeof(MyService),baseURI))
- {
- // 向服务器添终结点
- WSHttpBinding binding = new WSHttpBinding();
- // 这里不需要安全验证
- binding.Security.Mode = SecurityMode.None;
- host.AddServiceEndpoint(typeof(IService), binding, "my");
- // 为了能让VS生成客户端代码,即WSDL文档,故要添加以下行为
- ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
- {
- HttpGetEnabled = true
- };
- host.Description.Behaviors.Add(mdBehavior);
- //如果服务顺利启动,则提示,处理Opened事件
- host.Opened += (sender, e) => Console.WriteLine("服务已启动。");
- // 启动服务器
- try
- {
- host.Open();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- // 为了让程序不往下执行而结束,故加上这句
- Console.ReadKey();
- // 关闭服务器
- host.Close();
- }
- }
这时候,先确认Server项目是当前选定项目,然后运行,如果成功,你会看到如下图所示的内容。

好了,服务器端我们就完成了,下面轮到客户端。
这个就简单了,先找到Server所在的 \bin\debug 目录,运行Server.exe,确保服务成功启动。
选定Client项目,在“引用”上右击,从快捷菜单中选择“添加服务引用”

在弹出的窗口中输入刚才定义的基址,即http://localhost:8008/Service,记住,一定要用基址,就是创建ServiceHost实例时用的那个,不要用终结点地址。
单击“前往”按钮,服务读取正确后,输入你要的命名空间名字,单击确定。

这时候,我们就可以在客户端写代码了,
- static void Main(string[] args)
- {
- WS.ServiceClient client = new WS.ServiceClient();
- Console.WriteLine(client.TestMethod());
- Console.ReadKey();
- }
运行一下,我们的第一个WCF应用程序就完成了。

[转] 传说中的WCF的更多相关文章
- 传说中的WCF(12):服务器回调有啥用
你说,服务器端回调有啥用呢?这样问,估计不好回答,是吧.不急,先讨论一个情景. 假设现有服务器端S,客户端A开始连接S并调用相关操作,其中有一个操作,在功能上有些特殊,调用后无法即时回复,因为在服务器 ...
- 传说中的WCF(11):会话(Session)
在标题中我加了一个大家都很熟悉的单词——Session,熟吧?玩过Web开发的朋友肯定在梦中都会见到她. 在Web中为什么要会话呢?毕竟每个用户在一个Web应用中可能不止进行一次操作,比如,某二手飞机 ...
- 传说中的WCF(10):消息拦截与篡改
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过 程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过 ...
- 传说中的WCF(9):流与文件传输
在使用Socket/TCP来传输文件,弄起来不仅会有些复杂,而且较经典的“粘包”问题有时候会让人火冒七丈.如果你不喜欢用Socket来传文件,不妨试试WCF,WCF的流模式传输还是相当强大和相当实用的 ...
- 传说中的WCF(8):玩转消息协定
Message翻译成中文,相信各位不陌生,是啊,就是消息,在WCF中也有消息这玩意儿,不知道你怎么去理解它.反正俺的理解,就像我们互发短信一个道理,通讯的双方就是服务器与客户端,说白了吧,就是二者之间 ...
- 传说中的WCF(7):“单向”&“双向”
在WCF中,服务器与客户端的通讯有单向(单工)和双向(双工)之分.要说有什么形式上的表现,那就是单向与双向生成的SOAP不同,咱们先放下代码不说.但通常情况下,我们也不太需要去研究生成的SOAP是啥样 ...
- 传说中的WCF(5):数据协定(a)
在第4篇中,咱们了解了发送/接收SOAP头,从本篇开头,我们不妨更深入地去探求一下有关WCF中的消息到底是啥玩意儿.WCF庞大而复杂,而从 MSDN文档中,你会看到许多很专业很抽象的东西,你不禁会问, ...
- 传说中的WCF(4):发送和接收SOAP头
如果你实在不明白Header是个啥玩意儿,你就想一想你发送电子邮件时,是不是有个叫“附件”的东东?对啊,那么SOAP头是不是可以理解为一种附加信息?就是附加到消息正文的内容. 消息正文又是啥?WCF除 ...
- 传说中的WCF(3):多个协定
我们知道,WCF服务端是先定义服务协定,其实就是一个接口,然后通过实现接口来定义服务类.那么,有一个问题,如果一个服务类同时实现N个接口(也就是有N个协定)呢?结果会如何? 不必猜,我们还是通过实验来 ...
- 传说中的WCF(2):服务协定的那些事儿
上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...
随机推荐
- 【算法系列学习】DP和滚动数组 [kuangbin带你飞]专题十二 基础DP1 A - Max Sum Plus Plus
A - Max Sum Plus Plus https://vjudge.net/contest/68966#problem/A http://www.cnblogs.com/kuangbin/arc ...
- JSP动态员工登陆案例
package web; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import j ...
- Kafka官方文档
Apache Kafka是 一个分布式消息发布订阅系统.它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),,之后成为Apa ...
- springboot(十):邮件服务
springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了.准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5. ...
- bootstrap基础
相信大多数后端开发人员的html,css并不是太好(主要说我).想要做一些网页效果,难度会比较大.看了下bootstrap这个前端框架,发现这个框架比较好的解决了网页效果制作中一般性问题.总的来说,b ...
- 玩一玩nodejs--一个简单的在线实时填表应用
学习nodejs三天,入了个门,感觉他和jsp.php还是存在较大的差别.本文首先复习这些天学的一些知识点,然后谈一下如何一步一步到做一个在线实时填表的小应用,进一步巩固一下这些个知识点.这里先简单介 ...
- Java Swing 图形界面实现验证码(验证码可动态刷新)
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import j ...
- C#超简单方法实现两个richtextbox控件滚动条同步滚动
此文章属于作者原创,转载请注明,谢谢 有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果. 当然,传统的方法重载控件或者 ...
- EntityFramework6.X之概述
实体框架(EF6.X)是一种对象/关系映射器(O/R Mapping解决方案),一套支持开发面向数据的软件应用技术,采用特定域对象和关系数据形式使用数据,而不必考虑存储这些数据的基础数据库表和列,上层 ...
- 模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
我们大部分人都发过动态,想必都知道发动态.回复评论.删除动态的整个过程,那么作为初学者,要模仿这些功能有点复杂的,最起码表的关系得弄清楚~~ 先把思路理一下: (1)用户登录,用session读取 ...