NHibernate+WCF项目实战 

第一篇、项目介绍与搭建

第二篇、使用NHibernate实现数据访问并进行单元测试

第三篇、使用WCF对外提供Webservices接口并进行单元测试

第四篇、使用WAS对Webservices接口进行压力测试。

开发环境

    我的开发环境是VS2008 SP1+SQLServer 2005

    NHibernate版本是2.1.0.4000

  NUnit版本是2.5.2

  Microsoft Web Application Stress Tool 版本是1.1 

本节概要

    上一篇完成了用户操作的三个方法,本篇将通过WCF以webservices的方式对外提供接口。同时使用NUnit对webservices中的方法进行单元测试。

另,上一篇对NHibernate的使用还有很多地方值的改善,同时也感谢园友李永京的指点。

开发契约 contract

Contract项目为类库项目,该项目下会包含WCF中的ServiceContract,这是一些被加上Attribute [ServiceContract]的接口。同时接口中的方法也需要加上Attribute [OperationContract]
另,考虑到下一篇要对接口进行压力测试,所以接口中的方法也加上Attribute [WebGet],可以通过get方式访问方法。

下面就开始定义UserInfo的Contract—IuserInfo接口

using

    System.ServiceModel;

    System.ServiceModel.Web;//webGet

NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试using System;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Collections.Generic;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Linq;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Text;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.ServiceModel;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.ServiceModel.Web;//webGet
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试

NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
namespace Lee.Contract

开发服务  Services

Services项目也是类库项目,该项目主要是对Contract的具体实现,同时会调用DAL提供的数据访问层方法。

using

    添加对Lee.Model项目的引用。

    添加对Lee.DAL项目的引用。

    添加对Lee. Contract项目的引用。

我们实现的UserInfo的三个方法中都是返回了Bool值,如果方法返回对象,这时就需要添加对Lee.Model项目的引用。
另,如果要在WCF中传递对象,需要为实体类添加Attribute
 [DataContract]和[Serializable]。属性需要添加Attribute [DataMember]

下面是Lee.Services中的UserInfo 服务类

NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试using System;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Collections.Generic;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Linq;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Text;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using Lee.DAL;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using Lee.Model;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using Lee.Contract;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
namespace Lee.Services

开发宿主 Hosting

   Hosting项目为WCF服务应用程序,该项目会自动添加对System.Runtime.Serialization和System.ServiceModel的引用。

     using

        添加对Lee. Contract项目的引用。

        添加对Lee. Services项目的引用。

    详细步骤

    1)添加 UserInfo.svc

    2)删除文件 UserInfo.svc.cs;

    3)双击打开 UserInfo.svc

        <%@ ServiceHost Language="C#" Debug="true" Service="Lee.Hosting.UserInfo" CodeBehind="UserInfo.svc.cs" %>

        修改为:

       <%@ ServiceHost Language="C#" Debug="true" Service="Lee.Services.UserInfo" CodeBehind="Lee.Services.UserInfo.cs" %>

    4)修改Web.config;

      

NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试<?xml version="1.0" encoding="utf-8"?>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
<configuration>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试  
<connectionStrings>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
<add name="SQLConnection" connectionString="Database=XX;User ID=sa;Password=saas;Server=XX;" providerName="System.Data.SqlClient"/>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试  
</connectionStrings>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试  
<system.serviceModel>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" />
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
<services>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试      
<service behaviorConfiguration="Lee.Hosting.UserInfoBehavior" name="Lee.Services.UserInfo">
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
<endpoint address="" binding="basicHttpBinding" contract="Lee.Contract.IUserInfo">
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
<identity>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试            
<dns value="localhost" />
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
</identity>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
</endpoint>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
<endpoint address="webhttp" behaviorConfiguration="webHttp" binding="webHttpBinding" contract="Lee.Contract.IUserInfo">
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
<identity>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试            
<dns value="localhost" />
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
</identity>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
</endpoint>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试      
</service>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
</services>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
<behaviors>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试      
<endpointBehaviors>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
<behavior name="webHttp">
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
<webHttp />
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
</behavior>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试      
</endpointBehaviors>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试      
<serviceBehaviors>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
<behavior name="Lee.Hosting.UserInfoBehavior">
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
<serviceMetadata httpGetEnabled="true" />
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试          
<serviceDebug includeExceptionDetailInFaults="true" />
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试        
</behavior>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试      
</serviceBehaviors>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
</behaviors>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试  
</system.serviceModel>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试  
<system.web>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试    
<compilation debug="true"/>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试  
</system.web>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
</configuration>
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试

    5创建NHibernate配置文件hibernate.cfg.xml并设置为始终复制,添加对NHibernate和NHibernate.ByteCode.Castle的引用。

    6)效果查看

        浏览UserInfo.svc

       NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试

        对应的WSDL

        NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试

        查看Schema格式

NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试

    到现在为止,我们已经用WCF成功的对外发布了接口。下面我们对Webservices进行单元测试!

单元测试

    单元测试的相关设置在上一篇已经讲过了,这里不再介绍。

  测试步骤

    1using

        添加对Lee. Contract项目的引用。

    2)添加服务引用,直接点“发现“,可以找到该解决方案下的服务。

    NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试

  成功添加后,会自动在App.Config中创建client端EndPoint。

    3)创建服务测试类TestUserInfoSVC.cs

   

NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试using System;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Collections.Generic;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Linq;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using System.Text;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using Lee.Model;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using Lee.DAL;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
using NUnit.Framework;
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
NHibernate+WCF项目实战(三)使用WCF对外提供Webservices接口并进行单元测试
namespace Lee.Test

    4)可以在方法中设置断点单步调试。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2021-12-14
  • 2021-08-29
  • 2021-08-31
  • 2021-09-23
猜你喜欢
  • 2022-03-01
  • 2021-06-01
  • 2022-12-23
  • 2022-12-23
  • 2021-08-12
  • 2021-11-27
相关资源
相似解决方案