[转] 传说中的WCF

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

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

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

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

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

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

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

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

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

[csharp] view plaincopyprint?

  1. using System.ServiceModel;

  2. using System.ServiceModel.Description;

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

[csharp] view plaincopyprint?

  1. [ServiceContract]

  2. public interface IService

  3. {

  4. [OperationContract]

  5. string TestMethod();

  6. }

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

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

[csharp] view plaincopyprint?

  1. public class MyService : IService

  2. {

  3. public string TestMethod()

  4. {

  5. return "信春哥,考本科。";

  6. }

  7. }

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

[csharp] view plaincopyprint?

  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实例时用的那个,不要用终结点地址。

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

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

[csharp] view plaincopyprint?

  1. static void Main(string[] args)

  2. {

  3. WS.ServiceClient client = new WS.ServiceClient();

  4. Console.WriteLine(client.TestMethod());
  5. Console.ReadKey();

  6. }

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

时间: 2024-11-05 21:56:57

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

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

在使用Socket/TCP来传输文件,弄起来不仅会有些复杂,而且较经典的"粘包"问题有时候会让人火冒七丈.如果你不喜欢用Socket来传文件,不妨试试WCF,WCF的流模式传输还是相当强大和相当实用的. 因为开启流模式是基于绑定的,所以,它会影响到整个终结点的操作协定.如果你不记得或者说不喜欢背书,不想去记住哪些绑定支持流模式,可以通过以下方法: 因为开启流模式,主要是设置一个叫TransferMode的属性,所以,你看看哪些Binding的派生类有这个属性就可以了. Transfer

[转] 传说中的WCF(2):服务协定的那些事儿

上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说"态度决定一切",这句话,不知道各位信不信,反正我是信了.首先,敢于挑战自我,乐于接受新事物的人,就不会觉得有啥难学的,"世上有难事,只怕有心人":再者,WCF当然复杂了,整个.NET框架都复杂,但不难学,因为.NET有一个先天性优点--集成性和统一性严重地好,这也是我乐于研究.NET的主要原因之一,复杂但不混乱.一个统一的国家总比一个

【转】WCF中的InstanceContext与ConcurrencyMode

一.前言 最近忙于公司的在线升级项目,一个人要负责公司四大产品的在线升级,这四个产品是在Revit中以插件形式存在的,目前基于WCF来实现.等客户总量突破5万了,再重新用socket实现. 由于有服务器并发操作,所以要好好研究WCF的InstanceContext与ConCurrencyMode,找了好多文章,都没这篇写的言简意赅,特转发保留. 二.原文内容 原作者版权信息**************************************************************

项目总结——传说中的反射竟然是这个样子

这阵子项目结束之后,大家开始了总结,关于在项目中用到的各种知识,如AOP,CAS,SSO,多线程,分布式缓存,反射,WCF,框架,建库切库等等.虽然有的知识了解的不是很深,但是大致上都有了一个认识.那么今天,就让我们来谈谈传说中的反射. 1.是什么 (1).NET中的反射机制 反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.

jquery或者JavaScript调用WCF服务的方法

/****************************************************************** * Copyright (C): 一心堂集团 * CLR版本: 4.0.30319.18063 * 命名空间名称: WcfService1 * 文件名: IJoonService * GUID1: b7bd3ab3-3668-4727-9416-f9845da207e1 创建人:尹明能 * 创建时间: 2014-9-24 13:13:09 ***********

WCF使用X509证书自定义验证

接触WCF时间比较短,在项目中要使用X509证书,纠结好几天终于有了结论,因此为了方便日后查阅和园友交流特意单独将部分代码提出,并做以记录. 1.准备工作 制作X509证书,此处用到三个证书名称 导入证书步骤: 第一步:运行mmc 打开控制台,添加证书 将证书导入,再设置证书的读取权限 2.方便阅读下文,先展示下代码整体结构 3.编写服务代码(WcfSite工程下) 服务一: 1 public class HelloService : IHelloService 2 { 3 public str

.NET4.5中WCF中默认生成的basicHttpsBinding的研究

起因: 使用.net4.5建立了一个空白的WCF服务.默认使用的绑定配置是basicHttpsBinding. 问题发现: 1.用客户端进行服务引用,生成了默认的配置文件,其中绑定配置是basicHttpBinding. 2.因为需要单次传递大批量数据,所以修改绑定配置,如下: <basicHttpBinding> <binding name="BasicHttpBinding_IService" closeTimeout="00:10:00" r

PHP调用WCF提供的方法

一.准备工作 1.安装wampserver:过程略 2.配置wampserver: 2.1打开php.ini文件,去掉 ;extension=php_soap.dll 这里那个分号. 也有说把这个 ;extension=php_openssl.dll前面的分号也去掉的. 2.2 如上图,将php_soap打上√. 2.3 如上图,打开httpd.conf文件,找到Listen 80 ,将80端口改成一个较大的端口,如8000.因为80端口也能别的程序用着. 在这个directory里面有php页

WCF服务部署到IIS7.5

下面介绍如何把WCF服务部署到IIS: 为WCF服务创建.svc文件 我们知道,每一个ASP.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用.与之类似,每个WCF服务也具有一个对应的文本文 件,其文件扩展名为.svc.基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体 现在对.svc文件的访问上. .svc文件的内容很简单,仅仅包含一个ServiceHost指令(Direct