• 传说中的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应用程序就完成了。

  • 相关阅读:
    重定向丶管道丶参数传递
    zabbix监控redis
    zabbix监控mysql
    playbook
    zabbix通过jvm监控tomcat
    zabbix监控tcp状态
    部署centos6
    自动选择profile
    java jvm学习笔记十二(访问控制器的栈校验机制)
    java jvm学习笔记十一(访问控制器)
  • 原文地址:https://www.cnblogs.com/ywsoftware/p/3663848.html
Copyright © 2020-2023  润新知