使用WCF(Windows Communication Fundation)示例

简介:         一,使用手写代码方式创建                         首先建立如下类:                                    然后在引用中添加如下引用:                            ...


        一,使用手写代码方式创建

      

                 首先建立如下类:


           

          

            然后在引用中添加如下引用:

           

                



             接着创建我们要开放的服务接口:


              

                  



            并且为此接口添加实现类:


               

           

           

              定义好了服务和服务的实现之后,我们就可以开启服务了:



           

namespace 第一个WCF应用程序
{
    class Program
    {
        static void Main(string[] args)
        {
            using (MyHelloHost host = new MyHelloHost())  //创建一个服务对象
            {
                host.open();  //开启服务
                
                Console.Read();

            }
        }
    }

    public class MyHelloHost : IDisposable //获取定义一种释放资源的方法
    {

        private ServiceHost mylittleHello;  //定义一个服务对象

        


        //定义基地址
        public const string BaseAddress = "net.pipe://localhost";  

        //定义一个可选地址,可以选中性定义
        public const string HelloServiceAddress = "Hello";

        //定义服务契约实现类型
        public static readonly Type ServiceType = typeof(HelloService);


        //服务契约接口
        public static readonly Type ContractType = typeof(IHelloService);



        //创建一个绑定:定义一个服务绑定
        public static readonly Binding helloBinding = new NetNamedPipeBinding();


        //创造一个服务对象
        protected void CreateHelloServiceHost()
        { 
            //创建一个服务的对象
            mylittleHello =new ServiceHost (ServiceType ,new Uri[]{new Uri(BaseAddress)});

            //给当前服务对象添加终结点
            mylittleHello.AddServiceEndpoint(ContractType, helloBinding, HelloServiceAddress);


        }

        public ServiceHost MylittleHello //封装字段
        {
            get { return mylittleHello; }

        }

        //定义打开服务的方法
        public void open()
        {
            Console.WriteLine("开始启动服务-----");
            mylittleHello.Open();//打开
            Console.WriteLine("服务已经启动-----");
            
                
        }


        /// <summary>
        /// 
        ///构造方法
        /// </summary>
        public MyHelloHost()
        {
            CreateHelloServiceHost();
        }


        /// <summary>
        /// 销毁对象
        /// </summary>
        public void Dispose()
        {
            if (mylittleHello!=null)
            {
                (mylittleHello as IDisposable).Dispose();//销毁对象
            }
        }
    }

}

  

  开启结果如下:







         之后,我们可以测试调用此服务:


       

namespace 第一个MVC应用程序的客户端调用服务示例
{
    class Program
    {
        static void Main(string[] args)
        {
            using (HelloProxy proxy=new HelloProxy ())
            {
                //利用代理调用服务
                Console.WriteLine(proxy.Say("lhc"));

            }
        }

    }

    //硬编码定义服务契约
    [ServiceContract]
    interface IService
    { 
        //服务操作
        [OperationContract]
        string Say(string name);

    }

    /// <summary>
    /// 客户端代理典型
    /// </summary>
    class HelloProxy : ClientBase<IHelloService>, IService
    { 
        //硬编码定义绑定
        public static readonly Binding HelloBinding = new NetNamedPipeBinding();
    
            
        //硬编码定义地址
        public static readonly EndpointAddress HelloAddress = new EndpointAddress(new Uri("net.pipe://localhost/Hello"));//必须与服务端地址匹配(协议+地址)

        /// <summary>
        /// 构造方法
        /// </summary>
        public HelloProxy() : base(HelloBinding, HelloAddress) { }

        public string Say(string name)
        { 
            //使用channel属性对服务进行调用
            return Channel.SayHello(name);

        }
    
    }
}




结果如图:

    

 




          wow,感觉是不是有点儿乱呢?简单开启服务就要那么多代码,下面,我们将使用配置文件来简化开启服务的过程。




    二,使用配置文件部署WCF应用程序


                我们在应用程序中添加配置文件如下:


           



             之后的启动服务:



   



            可以看出,使用配置文件,我们可以将服务三要素写入配置文件,并且可以充分发挥配置文件易修改的优势,做到灵活配置。



  

    小结:

          感觉使用了WCF,我们只需开放出接口给其他系统调用即可,更重要的是,这些相互调用的系统可以在不同的物理空间,但是使用了WCF之后,我们可以将不同地域的服务整合到一个页面上,that's cool~


           

            





           

目录
相关文章
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
264 0
|
3月前
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
|
5月前
|
Windows
超详细的纯净windows系统重装示例
超详细的纯净windows系统重装示例
31 0
|
6月前
|
Windows
超详细的纯净windows系统重装示例
本文介绍了如何使用大白菜制作启动盘来安装纯净版Windows系统,以避免安装Ghost版本时附带的不必要的软件。
67 1
|
API Windows
[笔记]Windows核心编程《番外篇》常用的NT API及使用示例
[笔记]Windows核心编程《番外篇》常用的NT API及使用示例
197 0
|
API Windows
[笔记]Windows核心编程《番外篇》常用的NT API及使用示例
Windows核心编程《番外篇》常用的NT API及使用示例
851 0
[笔记]Windows核心编程《番外篇》常用的NT API及使用示例
|
算法 网络协议 Unix
QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)
QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)
499 0
QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)
|
安全 C++ Windows
windows C++ 互相等待线程同步示例
windows C++ 互相等待线程同步示例 开发中遇到线程同步问题,可抽象为如下模型: 1、主线程的继续执行的前提是子线程的变量已经初始化完毕。 2、子线程待主线程执行完毕后继续执行后续的初始化操作。 重复1,2执行……直到通信结束。
201 0
windows C++ 互相等待线程同步示例
|
C++ Windows
windows C++ 互相等待线程同步示例
本文是windows C++ 互相等待线程同步示例
635 0
|
C++ Windows
Windows守护进程简单示例
转载:https://blog.csdn.net/kikaylee/article/details/51395360 /* @描述:一个简单的Windows守护进程的例子(C++版本) @作者:kikaylee @日期:201...
3825 0