wlzxwfk 发表于 2015-8-13 11:03:52

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

namespace Model
{
   
    public class Users
    {
      
      public Int32 Id { get; set; }
      
      public String Name { get; set; }
      
      public String Password { get; set; }
      
      public Int32 Age { get; set; }
      
      public Boolean Sex { get; set; }
    }
}  
IUsers.cs



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using Model;

namespace Contract
{
   
    public interface IUsers
    {
      
      Boolean Login(String userName, String password);
      
      Boolean DelUserByID(int id);
      
      List<Users> SelUsers();
      
      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绑定使用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.iyunv.com/xoray007/archive/2011/12/20/2294964.html

  
页: [1]
查看完整版本: IIS 托管WCF服务学习手记 111220