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为内建类型如intString 隐式地定义为契约;

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;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Model
{
    [DataContract]
    public class Users
    {
        [DataMember]
        public Int32 Id { getset; }
        [DataMember]
        public String Name { getset; }
        [DataMember]
        public String Password { getset; }
        [DataMember]
        public Int32 Age { getset; }
        [DataMember]
        public Boolean Sex { getset; }
    }
}

 

IUsers.cs

using System;
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;
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绑定使用HTTPHTTPS进行传输,为基于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 
  

 

posted @ 2011-12-20 17:31  Nopcn  阅读(1209)  评论(0编辑  收藏  举报