每天进步一点--WCF学习笔记_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 每天进步一点--WCF学习笔记

每天进步一点--WCF学习笔记

 2014/5/25 21:17:16  小菜?大神?  博客园  我要评论(0)
  • 摘要:最近买了一本书WCF服务编程,重头再开始了解学习WCF,现将学习记录,以便后来复习,也希望和大家一起进步。WCF用终结点表示一种组成关系,终结点就是地址、契约与绑定的混合品,即地址(Address)、契约(Contract)、绑定(Binding)。以一个小例子来,调通我们的第一个WCF程序。我学习就爱用Demo来学习,再深入一步一步学习。我用的vs2012,新建WCF服务应用程序运行后显示这是WCF的服务端,我们先不做处理,下面我们添加WCF客户端,我们添加一个普通的控制台程序添加服务引用
  • 标签:笔记 学习 WCF 学习笔记

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

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

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

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

运行后显示

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

添加服务引用:

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

  我们创建我们的代理

class="brush:csharp;collapse:true;;gutter:true;">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小例子,希望对新手有所帮助

发表评论
用户名: 匿名