zoukankan      html  css  js  c++  java
  • 一个简单的WCF示例

    WCF程序分为三个部分:服务、宿主和客户端。下面就一步一步按这三个部分来构建一个简单的WCF程序。可以选择这三个部分都创建独立的解决方案,也可以在一个解决方案中创建三个项目。在下面的例子中将采用将三个项目放在一个解决方案中。服务使用类库项目,宿主和客户端使用控制台程序。

    1 创建一个空的解决方案命名为WCFDemo,在该解决方案中创建两个控制台项目和一个类库项目,分别为Client、Host和Service。在这三个项目中分别引用程序集System.ServiceModel,另外在Service项目中引用程序集using System.Runtime.Serialization

    2010-07-15_110417

    2 在本例中Service的功能就是提供一个返回HelloWorld的方法。在Service项目中添加一个名为IHelloWorldService的接口,并给接口添加相应的契约,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    //new using
    using System.Runtime.Serialization;
    using System.ServiceModel;
    
    namespace Service
    {
        [ServiceContract(Name="http://oec2003.cnblogs.com")]
        public interface IHelloWorldService
        {
            [OperationContract]
            string SayHello();
        }
    }

    3 将Service项目中的类Class1重命名为HelloWorldService,让该类继承接口IHelloWorldService,并实现方法SayHello。代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    
    namespace Service
    {
        public class HelloWorldService:IHelloWorldService
        {
            public string SayHello()
            {
                return "Hello oec2003";
            }
        }
    }

    4 至此,服务类已经编写好了,编译下该项目,接下来就开始做宿主了,首先在Host项目中添加对Service项目的引用,如下图:

    2010-07-15_112926

    5 在Host项目中需要初始化ServiceHost,并添加端点,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using Service;
    
    namespace Host
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (ServiceHost host = new ServiceHost(typeof(HelloWorldService)))
                {
                    host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(),
                        new Uri("http://localhost:10000/Service/HelloWorldService"));
    
                    if (host.State != CommunicationState.Opening)
                        host.Open();
    
                    Console.WriteLine("服务已经启动!");
                    Console.ReadLine();
                }
            }
        }
    }

    6 宿主到这儿也写好了,本例中的端点是用程序的方式来编写的,还可以使用配置文件的方式来做,有关配置文件的方式在以后的博客中会提到。现在开始写客户程序,将Service项目中的IHelloWorldService接口复制一份到Client项目中,在生成客户代理时用到。客户端程序代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    
    namespace Client
    {
        class Program
        {
            static void Main(string[] args)
            {
                EndpointAddress ea = 
                    new EndpointAddress("http://localhost:10000/Service/HelloWorldService");
                IHelloWorldService proxy = 
                    ChannelFactory<IHelloWorldService>.CreateChannel(new BasicHttpBinding(),ea);
                Console.WriteLine(proxy.SayHello());
                Console.ReadLine();
            }
        }
    }

    注:上面代码的EndpointAddress地址要和Host中的EndPoint地址一致

    7 所有代码编写完成,先运行Host,再运行Client,会看到结果如下:

    2010-07-15_121033 host

    2010-07-15_121042 Client

    总结

    1 本例中只是实现了一个很简单的功能,是我们对WCF有个全局性的了解,知道一个基本的运行流程。

    2 Host项目中设置服务端点用的是程序实现,而且直接给出完整URI。这个服务端点的地址设置是很灵活的,可以程序写、可以配置文件配置、可以写完整URI、可以使用相对地址。如果使用了相对地址在ServiceHost中药设置基地址。

    3 Host项目中的绑定使用的是BasicHttpBinding,绑定是用来定义通信信道,BasicHttpBinding绑定可以实现基本的Http协议的需求。绑定的方式有很多种,可以根据实际开发需求选择。

    4 Client项目中的代理创建方式是使用ChannelFactory手动创建的,使用这种方式创建需要有服务的操作元数据,本例中将Service项目中的IHelloWorldService接口复制了一份在客户端来提供操作元数据。生成代理还有其他多种方式,以后博文中再写。

    源码下载

  • 相关阅读:
    服务器数据库不用开通远程连接通过工具在本地连接操作的方法
    怎么搜索同类网站
    Java三行代码搞定MD5加密,测试5c短信网关的demo
    iOS检测用户截屏并获取所截图片
    tomcat输出servlet-api.jar
    从svn资源库目录checkout出maven项目方法
    Maven打包pom里面配置exclude 排除掉环境相关的配置文件
    PHP获取毫秒时间戳,利用microtime()函数
    阿里云OneinStack,Linux下tomcat命令
    阿里云OneinStack数据库相关
  • 原文地址:https://www.cnblogs.com/oec2003/p/1778013.html
Copyright © 2011-2022 走看看