日期:2014-06-10  浏览次数:20551 次

  最近买了一本书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小例子,希望对新手有所帮助