zoukankan      html  css  js  c++  java
  • 每天进步一点--WCF学习笔记

      最近买了一本书WCF服务编程,重头再开始了解学习WCF,现将学习记录,以便后来复习,也希望和大家一起进步。

      WCF用终结点表示一种组成关系,终结点就是地址、契约与绑定的混合品,即 地址(Address)、契约(Contract)、绑定(Binding)。

      以一个小例子来,调通我们的第一个WCF程序。我学习就爱用Demo来学习,再深入一步一步学习。

      我用的vs2012,新建WCF服务应用程序

    运行后显示

    这是WCF的服务端,我们先不做处理,下面我们添加WCF客户端,我们添加一个普通的控制台程序

    添加服务引用:

      客户端要调用服务的操作,客户端首先要导入服务契约到客户端的本地描述中。如果客户端使用了WCF,调用操作常见的做法就是使用代理。代理就是一个CLR类,它公开了一个单独的CLR接口用于表示服务契约。

      我们创建我们的代理

    namespace ConsoleApplication1
    {
        class MyContractClient : ClientBase<ServiceReference1.IService1>, ServiceReference1.IService1
        {
            public MyContractClient()
            {
            }
            public MyContractClient(string endpointName)
                : base(endpointName)
            {
            }
    
            public string GetData(int value)
            {
                return Channel.GetData(value);
            }
    
    
    
            public ServiceReference1.CompositeType GetDataUsingDataContract(ServiceReference1.CompositeType composite)
            {
                throw new NotImplementedException();
            }
    
    
    
            public Task<string> GetDataAsync(int value)
            {
                throw new NotImplementedException();
            }
    
            public Task<ServiceReference1.CompositeType> GetDataUsingDataContractAsync(ServiceReference1.CompositeType composite)
            {
                throw new NotImplementedException();
            }
        }
    }
    

      该类继承与ClientBase,需添加对using System.ServiceModel的引用。

      客户端和服务端的契约和绑定要保持一致,不然会报错,我们更改服务端配置文件,修改绑定

    修改客户端配置文件

    服务端和客户端都使用basicHttpBinding绑定,最后我们在Program启动类中添加调用代码:

    class Program
        {
            static void Main(string[] args)
            {
                using (MyContractClient client = new MyContractClient())
                {
                    string result = client.GetData(3);
                    Console.WriteLine(result);
                    
                }
            }
        }
    

      运行后就调用了服务端方法,并返回值,服务端的GetData方法为

        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。
        // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。
        public class Service1 : IService1
        {
            public string GetData(int value)
            {
                return string.Format("You entered: {0}", value);
            }
    
            public CompositeType GetDataUsingDataContract(CompositeType composite)
            {
                if (composite == null)
                {
                    throw new ArgumentNullException("composite");
                }
                if (composite.BoolValue)
                {
                    composite.StringValue += "Suffix";
                }
                return composite;
            }
        }
    

      所以客户端调用结果为

    以上就是我创建的WCF小例子,希望对新手有所帮助

  • 相关阅读:
    C# 模式&模式匹配
    CentOS7下安装 dotnet sdk
    PLSQL 设置
    Visual Studio Code 开发 .NetCore 插件列表
    .net core 服务生命周期
    从 Asp.Net Core 2.2 迁移到 3.0 的方案
    CSRedisCore 介绍
    Entity Framework 命令
    DataAnnotations 模型配置
    依赖注入学习(理论)
  • 原文地址:https://www.cnblogs.com/zb-success/p/3751496.html
Copyright © 2011-2022 走看看