Code Copied

WCF服务创建步骤和示例

基本概念

Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。

关于WCF服务的详细介绍和功能说明,还请参考MSDN:
https://msdn.microsoft.com/zh-cn/library/ms731082(v=vs.110).aspx

服务一般用于远程对象的调用(跨程序的调用或跨服务器的调用),就如我们所熟知的,服务会公开两个东西:服务操作(服务方法)和数据类型。
在传统的Web Service中,一个搭建好的服务会将它们体现在WSDL(Web Service描述语言)中。

WCF不同于传统的Web Service,它提供了更多丰富的功能,Web Service仅仅是其中的冰山一角。

下面是一些基础概念的解释,它们很基础,也是我们开启WCF旅程的车票。

服务契约(Service Contract)

服务器契约描述了客户端能够执行的服务操作。只有接口或者类可以标记ServiceContract属性,从而被定义为WCF服务。

操作契约(OperationContract)

即使为接口或者类标记了ServiceContract属性,但并不是所有的方法都是契约的一部分。只有显式地标记了OperationContract属性的方法才做为WCF契约暴露的一部分,通俗地讲标记了OperationContract属性的方法就是服务公开的方法。

数据契约(Data Contact)

数据契约定义了服务交互的数据类型,WCF的内建类型都被隐式地定义为数据契约,例如int和string。

数据成员(DataMember)

在数据契约中,只有标记了DataMember的属性或字段才能被序列化(序列化为XML),即作为客户端和服务之间的数据传输。

概念总结

  1. ServiceContract和OperationContract要联合起来使用,用于声明和公开WCF服务和方法
  2. DataContract和DataMember要联合起来使用,用于声明被序列化的类型和属性。

契约是WCF的核心,除了上述的3种契约类型,WCF还包含一些其他的契约类型,例如:消息契约(Message Contract)。

WCF服务示例创建

WCF服务创建步骤

1.打开Visual Studio,在菜单中选择File → New → Project

image

2.在Project Template中选择WCF Service Application,然后在Name处输出项目名称

image

3.删除项目自动创建的IService1.cs和Service1.svc文件

image

4.右键项目 → Add → New Item,添加新文件

image

5.选择Web节点下的WCF Service,在Name处输入Service的名称

image

image

6.删除IUserService和UserService.svc.cs文件中的DoWork方法

image

image

7.添加数据契约(DataContract)

在项目下创建一个User类,标记DataContract属性,User的属性成员标记DataMember属性。

using System.Runtime.Serialization;

namespace WcfServiceSample
{
    [DataContract]
    public class User
    {
        [DataMember]
        public string UserName { get; set; }

        [DataMember]
        public int Age { get; set; }
    }
}

在如果要在非WCF项目中声明标记DataContract属性的类,则需要为该项目添加System.Runtime.Serialization引用。

8.添加操作契约(OperationContract)

在IUserService中添加方法,并标记OperationContract属性。

using System.ServiceModel;

namespace WcfServiceSample
{
    [ServiceContract]
    public interface IUserService
    {
        [OperationContract]
        void AddUser(User user);

        [OperationContract]
        User[] GetUsers();
    }
}

在UserService中添加操作契约的实现。

using System.Collections.Generic;
using System.Linq;

namespace WcfServiceSample
{
    public class UserService : IUserService
    {
        private IList<User> _users = new List<User>
        {
            new User {UserName = "Sunny", Age = 27}
        };

        public void AddUser(User user)
        {
            _users.Add(user);
        }

        public User[] GetUsers()
        {
            return _users.ToArray();
        }
    }
}

9.测试WCF程序

将UserService.svc设置为起始页

image

按F5运行时,Visual Studio弹出WCF Test Client工具。
双击IUserService的方法,例如AddUser()方法,在右侧的Value列输入各属性的值,然后点击Invoke按钮。

image

image

10.在IIS中部署WCF程序

右键IIS的Sites节点,点击Add Web Site…

image

指定Site name,Physical path和Port。

image

设置ApplicationPool,将WcfServiceSample设置为.NET Framework v4.0.30319

image

点击Restart启动Website。

image

image

在浏览器中查看服务,选择Content View → 选中UserService.svc文件 → Browse

image

image

示例和文档下载

示例下载:http://blog.64cm.com/source/WCF/WCFServiceSample.zip

文档下载:http://blog.64cm.com/source/WCF/WCF服务创建步骤.xlsx