zoukankan      html  css  js  c++  java
  • 传说中的WCF(1):这东西难学吗?

    WCF难学吗?

    是啊,这问题估计很多人都会问,也包括阿拉在内,也有此深刻而严重的凝问。

    也有人说:“如何某项技术可以化繁为简,学起来轻松一点就好了。”也许,人类开生就摆脱不了一种习性——懒惰;不过,也有人认为,很多时候,人们是不是总喜欢把简单的事情复杂化,那么,很多人都觉得很复杂的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();
        }

    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所在的 indebug 目录,运行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应用程序就完成了。

    2013-12-07

  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/yuanli/p/3463345.html
Copyright © 2011-2022 走看看