IIS 托管WCF服务学习手记 111220
1. 什么是WCF
WCF ,Windows通信基础(Windows Communication Foundation,WCF)是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。
地址:WCF的每个服务都具有唯一的地址(Addresses)。
地址包含两个重要元素:服务位置与传输协议(Transport Protocal),或者是用于服务通信的传输样式(Transport Schema).服务位置包括目标机器名、站点或网络、通信端口、管道或队列,以及URL。
WCF 支持以下传输样式:HTTP TCP IPC(基于命名管理的内部进程通信)MSMQ
地址通常采用如下格式:【基地址】/【可选的URI】
基地址(Base Address)通常的格式如下:【传输协议】://【机器名或域名】【:可选端口】
示例:http://localhost:8001/MyService “采用Http协议访问localhost机器并在8001端口等待用户的调用”
2. 契约
WCF的所有服务都要公开为契约(Contract),契约是描述服务功能的标准方式。
WCF定义了四种类型的契约
2.1. 服务契约(Service Contract)
服务契约描述客户端能够执行的服务操作。
2.2. 数据契约(Data Contract)
数据契约定义了与服务交互的数据类型。WCF为内建类型如int和String 隐式地定义为契约;
2.3. 错误契约(Fault Contract)
错误契约定义服务抛出的错误,以服务处理错误和传递错误到客户端的方式。
2.4. 消息契约(Message Contract)
消息契约允许服务直接与消息交互,消息契约可以是类型化的,也可以是非类型化的。
3. 托管
每个WCF服务必须托管(Hosting)在Windows进程中,该进程被称为宿主进程(Host Process)。单个宿主进程可以托管多个服务,而相同服务类型也能够托管在多个宿主进程中。
宿主可以由IIS提供、自托管方式实现。
3.1. IIS 托管
通过HTTP协议,通过在IIS下创建虚拟目录。VS 开发时可以选择在”新建”->”网站”创建WCF 服务。
整个Demo如下:
Demo采用传统的三层设计,DAL 数据访问层、BLL业务逻辑层、Model 实体层,WebWcfDemo111219 表现层
Model 实体层需要对方提供服务的数据需要定义数据契约
Contract 是契约层,采用服务接口实现(可以通过抽象类实现)
Services 是契约服务层,实现Contract接口,方法调用BLL,不会破坏原有的逻辑结构。
WCFService Wcf服务站点 能进行WCF服务发布部署到IIS中。
各层代码如下:
Users.cs:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace Model
{
[DataContract]
public class Users
{
[DataMember]
public Int32 Id { get; set; }
[DataMember]
public String Name { get; set; }
[DataMember]
public String Password { get; set; }
[DataMember]
public Int32 Age { get; set; }
[DataMember]
public Boolean Sex { get; set; }
}
}
IUsers.cs
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using Model;
namespace Contract
{
[ServiceContract(Name="IUsersService")]
public interface IUsers
{
[OperationContract]
Boolean Login(String userName, String password);
[OperationContract]
Boolean DelUserByID(int id);
[OperationContract]
List<Users> SelUsers();
[OperationContract]
Users ShowUserByName(String userName);
}
}
UsersService.cs
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Contract;
using Model;
using BLL;
namespace Services
{
public class UsersService:IUsers
{
public Boolean Login(String userName, String password)
{
Users user=new Users{
Name=userName,
Password=password
};
return new UsersBll().AddUser(user);
}
public Boolean DelUserByID(int id)
{
return new UsersBll().DelUser(id);
}
public List<Users> SelUsers()
{
return new UsersBll().SelUser();
}
public Users ShowUserByName(String userName)
{
return new UsersBll().FindUserByName(userName);
}
}
}
Web.config 配置方面:通过编辑WCF配置方式进行编辑(如果右击没有显示可以通过SvcConfigEditor.exe获得)
打开配置文件后,可以设置终结点的绑定方式
基本绑定(Basic Binding)
由BasicHttpBinding类提供。基本绑定能够将WCF服务公开为旧的ASMX WebE服务,使用旧的客户端能够与新的服务协作。
TCP绑定
由NetTcpBinding类提供。TCP绑定使用TCP协议实现在Intranet中的跨机器通信。前提是,它要求客户端与服务都必须使用WCF。
IPC绑定
由NetNamedPipeBinding类提供。它使用命名管道为同一机器的通信进行传输。这种绑定方式最安全,因为它不能接收来自外部的调用。IPC绑定支持的特性与TCP绑定相似。
Web服务(WS)绑定
由WSHttpBinding类提供。WS绑定使用HTTP或HTTPS进行传输,为基于Internet的通信提供了诸如可靠性、事务性与安全性等特性。
WS联邦绑定(Federated WS Binding)
由WSFederationHttpBinding类提供。WS联邦绑定是一种特殊的WS绑定,提供对联邦安全的支持。
WS双向绑定(Duplex WS Binding)
由WSDualHttpBinding类提供。WS双向绑定与WS绑定相似,但它还支持服务到客户端面的双向通信。
配置完成后可以通过F5调试运行得到如下界面:
服务完成后,可以在Visual Studio 命令提示(2010)中通过 WcfTestClient +基地址的方式进行调试。
调试通过后直接发布到IIS,发布WCF只要发布WCFService就可以了,如果WCFService存在调用数据库的方法,又没有在源代码直接写死连接。那么需要在Web.config写明。
部署后得到的WCF是以IIS托管的,如下:
附源代码: WebWcfDemo111219 下载
原文地址:http://www.cnblogs.com/xoray007/archive/2011/12/20/2294964.html