zoukankan      html  css  js  c++  java
  • [转] 传说中的WCF

    这个解决方案中包含两个项目,一个叫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.   
    6.     using (ServiceHost host = new ServiceHost(typeof(MyService),baseURI))  
    7.     {  
    8.         // 向服务器添终结点  
    9.         WSHttpBinding binding = new WSHttpBinding();  
    10.         // 这里不需要安全验证  
    11.         binding.Security.Mode = SecurityMode.None;  
    12.         host.AddServiceEndpoint(typeof(IService), binding, "my");  
    13.         // 为了能让VS生成客户端代码,即WSDL文档,故要添加以下行为  
    14.         ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()  
    15.         {  
    16.             HttpGetEnabled = true  
    17.         };  
    18.         host.Description.Behaviors.Add(mdBehavior);  
    19.   
    20.         //如果服务顺利启动,则提示,处理Opened事件  
    21.         host.Opened += (sender, e) => Console.WriteLine("服务已启动。");  
    22.         // 启动服务器  
    23.         try  
    24.         {  
    25.             host.Open();  
    26.         }  
    27.         catch (Exception ex)  
    28.         {  
    29.             Console.WriteLine(ex.Message);  
    30.         }  
    31.   
    32.         // 为了让程序不往下执行而结束,故加上这句  
    33.         Console.ReadKey();  
    34.         // 关闭服务器  
    35.         host.Close();  
    36.     }  
    37. }  


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

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

    这个就简单了,先找到Server所在的 indebug 目录,运行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.   
    6.     Console.ReadKey();  
    7. }  


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

  • 相关阅读:
    手写web框架之加载配置项目
    JAVA中注解的实现原理
    使用Mock 测试 controller层
    如何写resultful接口
    RSA加密、解密、签名、验签的原理及方法
    AES256位加密
    聊聊分布式事务,再说说解决方案
    分布式锁简单入门以及三种实现方式介绍
    redis总结(面试中容易遇到的)
    字符串匹配的KMP算法
  • 原文地址:https://www.cnblogs.com/fan-yuan/p/3718173.html
Copyright © 2011-2022 走看看