提前发布4/25上海俱乐部活动演讲“集中化WCF服务配置管理”示例程序

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

承蒙4/25上海俱乐部活动组织团队邀请,本人有幸将在本次活动中和大家分享一下“集中化WCF服务配置管理”方面的一些探索。为了让大家对活动当天我讲的话题提前有一个更直观的了解,在这里提前介绍一下到时我会演示的示例程序。


本示例程序具体演示如下内容:

1) 基于SQL Server数据库的集中化WCF服务配置管理;

2) 集中化ConnectingString管理;

3) 集中化AppVariable管理;

4) 基于集中化配置管理的WCF ServiceHostFactory和WCF ServiceLocator;

5) 基于集中化配置管理的跨WCF的LINQ Style分页、排序查询及DataSource控件的使用;

6) 整合本地ServiceLocator的WCF服务发布和消费;


下载地址(请使用SVN客户端下载):

http://nintegrate.googlecode.com/svn/trunk/


安装说明:

请先使用SVN客户端下载所有代码,然后根据samples/setup目录中的readme.txt初始化配置数据库并打开示例的solution。要运行本示例,您需要至少安装了IIS6,VS2008和SQL Server 2005或2008或Express。如果要运行Net.Tcp Binding的演示,需要IIS7。


示例工程:

本示例程序由下面四个C#工程项目组成:

1. SimpleServiceContracts - 定义了ServiceContracts和DataContracts

2. SimpleServiceImpls - 包含了ServiceContracts的实现类

3. SimpleServiceProvider – 服务发布Web程序

4. SimpleServiceConsumer - 服务消费Web程序

这四个示例工程又分别依赖于由NIntegrate, NIntegrate.Query, NIntegrate.Query.Command和NIntegrate.Web这四个工程组成的名为NIntegrate的基于WCF和集中化配置的SOA框架(关于这个框架的更多内容,Teddy的博客以后会有更多介绍,这里让我们还是先关注示例程序本身)。


SimpleServiceProvider程序

本程序使用IIS发布了两个WCF服务QueryService.svc和SimpleService.svc。这两个.svc文件的内容如下:

QueryService.svc - NIntegrate查询服务,由NIntegrate内置实现

1  <% @ ServiceHost Service = " NIntegrate.Query.IQueryService, NIntegrate.Query, Version=0.5.0.1, Culture=neutral, PublicKeyToken=e2b9e2165dbdd5e6 "  Factory = " NIntegrate.WcfServiceHostFactory, NIntegrate, Version=0.5.0.1, Culture=neutral, PublicKeyToken=e2b9e2165dbdd5e6 "   %>

 

SimpleService.svc - 一个简单的SayHello服务,用于演示集中化配置的多Binding,多Endpoint的WCF服务发布和消费

1  <% @ ServiceHost Service = " SimpleServiceContracts.ISimpleServiceDemo, SimpleServiceContracts "  Factory = " NIntegrate.WcfServiceHostFactory, NIntegrate, Version=0.5.0.1, Culture=neutral, PublicKeyToken=e2b9e2165dbdd5e6 "   %>

 

这里值得注意的有两点:

1. 这两个服务的Service指定的是服务的ServiceContract接口类型而非服务的具体实现类。

2. 这两个服务通过由NIntegrate实现的WcfServiceHostFactory自动通过指定的ServiceContract接口类型和基于SQL Server的集中化配置数据库创建相应的ServiceHost,并发布服务。

 

解析:

WcfServiceHostFactory在内部是如何通过指定的ServiceContract接口类型找到具体的实现类的呢?是通过一个可在Web.config中配置的本地ServiceLocator实现的。NIntegrate内置实现了一个基于SQL Server数据库集中化配置的AppVariableServiceLocator,并提供了方便的接口可以和第三方的ServiceLocator,如Unity,Castle这样的IoC容器进行整合来自动定位接口的实现。在本示例中,ServiceContract接口类型对应的服务实现类,是通过数据库中的AppVariable表进行映射,并使用AppVariableServiceLocator类进行定位的。

 

在SimpleServiceProvider的Web.config中,只需要设置一个AppCode和一个ConnectionString,无需任何WCF配置信息:

 1 
 2  < appSettings >
 3     < add  key ="NIntegrate.Configuration.AppCode"  value ="SP_SSP"   />
 4     <!-- To set service locator wrapper for external IoC container here, by default, the build-in AppVariableServiceLocator is used. -->
 5     <!-- <add key="NIntegrate.ExternalServiceLocator" value="NIntegrate.AppVariableServiceLocator, NIntegrate, Version=0.5.0.1, Culture=neutral, PublicKeyToken=e2b9e2165dbdd5e6"/> -->
 6  </ appSettings >
 7  < connectionStrings >
 8     < add  name ="NIntegrate.Configuration"  connectionString ="Data Source=vista;Initial Catalog=NIntegrateDemo;Persist Security Info=True;User ID=nbear;Password=nbear"  providerName ="System.Data.SqlClient"   />
 9  </ connectionStrings >
10 

 

SimpleServiceConsumer程序

本程序也是一个部署在IIS下的Web程序,它只包含一个Default.aspx页面和一个Web.config文件。

他的Web.config和SimpleServiceProvider的Web.config一样,只需要设置一个AppCode和一个ConnectringString:

1 
2  < appSettings >
3     < add  key ="NIntegrate.Configuration.AppCode"  value ="SP_SSC" />
4  </ appSettings >
5  < connectionStrings >
6     < add  name ="NIntegrate.Configuration"  connectionString ="Data Source=vista;Initial Catalog=NIntegrateDemo;Persist Security Info=True;User ID=nbear;Password=nbear"
7      providerName ="System.Data.SqlClient" />
8  </ connectionStrings >
9 

 

他的Default.aspx页面则演示了QueryService.svc和SimpleService.svc这两个Service的使用。运行Default.aspx页面的界面如下:

image

从界面可以看到,这里有几个GridView可以排序和编辑QueryService和SimpleService的Binding和Endpoint,他们都是通过使用由NIntegrate提供的QueryDataSource控件基于QueryService.svc实现的。最后一行是SimpleService.svc的调用的输出和当前使用的WCF Binding类型。


当前,QueryService和SimpleService都使用数据库中配置的“Sample - Shared Binding”这个Binding运行的,我们可以直接在GridView中修改Binding的类型和配置信息。修改Binding后,需要recycle IIS中的AppPool使新的配置生效。(注意,只有IIS7支持修改成非HTTP的Binding,并且要自己在IIS中启用相应的net.tcp或net.pipe Binding支持)。


SimpleService有第二个名为“SimpleServiceDemo Binding 2”的NetTcpBinding,如果您使用的是IIS7,并且已经启用了IIS中的net.tcp Binding,可以点击Enable将它激活。recycle IIS中的AppPool并重行运行 Default.aspx的话,您将看到,最后一行的Binding Type变成“NetTcpBinding”。也就是说,如果一个Service有多个激活状态的不同类型的Endpoint,NIntegrate提供的ServiceManager会保证最优的Binding被使用。例如,这里SimpleService有WSHttp和NetTcp这两个Binding,当然NetTcp是最优的。更进一步。假如,这里还配置了本地ServiceLocator,并为SimpleService指定了对应的实现类,那么,您也可以猜到,“更优”的本地Service实现会被使用,而不会走WCF通道。

 

QueryDataSource控件又是如何通过QueryService.svc实现对Service, Binding和Endpoint这些配置信息的呈现、排序和修改的呢?事实上,QueryService提供的查询语法不仅支持简单的CRUD,还支持LINQ Style的查询语言,多种数据库支持,数据库特有的函数扩展和分页排序,并且查询语言可以跨WCF和COM兼容(也就是说,可以在非.NET应用程序如ASP中使用同样的LINQ Style查询语言访问WCF发布的服务远程进行同样的分页排序查询)。这里容我卖个关子,就不多介绍了。大家可以选择自己看代码(包括NIntegrate核心类库和本示例都是基于BSD协议公开全部源代码的),来参加俱乐部活动和Teddy一起探讨或者等Teddy的博客将来专门的专题来介绍。


好了就先介绍这么多了。有任何意见和建议欢迎通过各种渠道和Teddy交流。如果您来参加4/25的活动,当然更欢迎了。不过,我知道很多朋友周末打算去看上海车展的,没关系,顶顶这个帖子我也知足了。


//我是结尾符

Tag标签: nintegrate soa
2026年最新深圳市公交、地铁线路及站点矢量数据.zip 数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息 立即下载

相关推荐

2026年最新上海市公交、地铁线路及站点矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

理解Design Pattern

<br />本文的目的是以最精炼的语言,理解什么是Design Pattern,为什么需要Design Pattern,和关于Design Pattern的争论。什么是Design Pattern?<br />从字面上理解,Pattern,指的是解决常见问题的可重用的方案。Design,则限定了,这里的Pattern是为软件的设计服务的。因此,所谓Design Pattern,指的是解决常见的软件设计问题的可重用的方案,或者说解决方案的模板。<br /> <br />两点需要特别注意的是:算法不是Desig

Teddy's Knowledge Base 4794

设备管理基于OEE数据的闲置富余设备识别系统:制造业设备利用率监控与预警方案设计

内容概要:本文档为鹏鼎EES项目第二阶段关于设备闲置与富余识别的需求设计方案,旨在通过自动化方式识别低利用率设备,减少资产浪费。系统基于OEE系统提供的设备近6个月时间稼动率数据,设定&ldquo;闲置&rdquo;(连续6个月稼动率为0%)和&ldquo;富余&rdquo;(6个月平均稼动率≤30%)的判断标准,每周一自动执行识别任务并生成记录。支持在系统中查看识别结果列表、筛选导出数据、发起闲置申请及删除记录(管理员权限)。同时,系统通过鼎加机器人按设备闲置/富余持续时长(7天、30天、90天、180天)逐级向上推送预警消息至维护人员、厂长、处长、经管等层级,推动问题处理。此外,若设备被判定为闲置但未提交闲置申请,系统将向维护人员和设备课长发送D+提醒。; 适合人群:系统设计人员、开发人员、测试人员、设备管理人员及项目实施相关人员;尤其适用于熟悉OEE系统、设备管理流程及企业信息化系统的专业人员;; 使用场景及目标:① 实现设备利用率的动态监控与闲置风险预警;② 支持企业优化设备资源配置,降低资产闲置成本;③ 推动设备闲置处理流程自动化与责任到人机制建立;④ 为后续设备处置、调配、报废等决策提供数据支撑;; 阅读建议:本文档为研发与实施阶段的核心指导文件,涉及系统逻辑、数据来源、权限控制与集成接口等关键内容,建议结合OEE数据对接情况、企业组织架构与设备管理流程协同研读,并关注阈值配置、提醒机制与状态联动等可配置项的实际业务适配性。

C#2.0 - Object Pool 简单实现

本文介绍本人的一个简单Object Pool实现。什么是Object Pool呢?大家可能都知道什么是数据库连接池,他能极大避免不需要的对象销毁和初始化开销。本文实现的对象池是一个通用的可用于任何有实例化接口的对象的池。默认的对象的实例化接口是new,文中也演示了如果您的对象需要从一个Factory构造,或当你的对象是用Emit生成时,如何简单继承ObjectPool类,实现特殊的对象的

Teddy's Knowledge Base 1365

Enterprise WCF - Integrate WCF Configuration into Your Enterprise Framework

Background Lots of people declares they are using WCF in their “enterprise” distributed software development together with other SOA technologies, and even calls their software architecture WCF b

Teddy's Knowledge Base 1213

讨论:WCF可序列化的ActiveRecord实现有意义吗?

<br />本文的目的,是探讨WCF可序列化的ActiveRecord实现是否有意义。ActiveRecord模式简介<br />ActiveRecord模式是Martin Fowler的企业应用架构模式中提到的一种数据访问模式,如下图:<br /><br />Person类包含lastName, firstName等这些属性,一个Person类的实例,对应数据库的一个Person表或视图的一条记录,每一个属性,对应数据库记录的一个字段;同时,Person类包含CRUD方法,封装了对数据库的操作;Perso

Teddy's Knowledge Base 1201

理解单元测试(Unit Testing)

<br />本文的目的是以最精炼的语言,正解什么是单元测试,为什么要单元测试,和如何进行单元测试。 什么是单元测试(Unit Testing)?<br />测试(Testing)这个词很容易理解,那么什么是单元(Unit)呢?一个单元指的是应用程序中可测试的最小的一组源代码。一组源代码可测试,一般要求其有明确的输入和输出。因此,一般来讲,源代码中包含明确的输入和输出的每一个方法被认为是一个可测试的单元。注意,这里指的输出,并不局限于方法的返回值或对输入参数的改变,而包括了方法的执行过程中,改变的任何数据。为

Teddy's Knowledge Base 1196

来一点反射,再来一点Emit —— 极度简化Entity!

在前一篇文章《没有ORM或代码生成数据就不能持久化了? - 用范型技术代替代码生成!》中,Teddy尝试运用泛型极大简化了一个轻量级持久化框架对代码生成的依赖,并且为了保证性能,整个持久化组件没有使用反射。在本文中,Teddy将在保证性能的基础上,加一点反射和加一点Emit,从而进一步简化Entity的定义和使用,当然也就进一步降低了组件对传统代码生成的依赖。读者可以对比前文阅读本文,看

Teddy's Knowledge Base 959

Apply SOA Design Patterns with WCF (5) WCF Based ASP.NET DataSouce Control (基于WCF的数据源控件)

Original (原创) by Teddy’s Knowledge Base Content (目录) (1) WCF Configuration Centralization (WCF配置集中管理) (2) WCF Automatic Deployment (WCF自动化部署) (3) WCF Automatic Service Locating (WCF自动化服务定位) (4)

Teddy's Knowledge Base 948

Web Application Architectures: Simple 2 Layer, Standard 3 Layer and Distributed 3 Layer

Abstract:This article discusses three common web application architectures: Simple 2 Layer, Standard 3 Layer and Distributed 3 Layer. For each architecture, it gives an ASP.NET 2.0 sample imple

Teddy's Knowledge Base 921

ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射

实体继承是基于OO和关系型数据库软件系统设计中的一个重要主题。本文通过基于NBear的实例解析ORM中的实体继承体系映射的方方面面。本文涉及的内容包括:1. 单表继承体系2. 一实体一具体表3. 一实体一扩展表4. 接口实现映射vs基类继承映射1. 单表继承体系所谓单表继承体系就是用一张数据库表存储整个继承体系中的所有实体的数据。单表继承体系适合那种继承体系中实体数目相对较少,总记录

Teddy's Knowledge Base 897

发布NBearLite中文版完全参考手册 + NBearLite 10分钟入门教程 + NBearLite v1.0.0.7 beta

NBearLite是一个.NET 2.0开源(BSD协议)通用数据访问组件,支持SQL Server、Oracle、MS Access,MySQLSQLite,PostgreSQL等多种数据库的透明切换(改变数据库类型时无需修改具体的查询代码)。NBearLite实现了一套类似LINQ的强类型数据库查询语法(支持从简单的CRUD查询到GroupBy、InnerJoin,Paging,S

Teddy's Knowledge Base 891

用自定义KeyValueCollection类代替Dictionary/Hastable,改善简化后的Entity性能

在上一篇《来一点反射,再来一点Emit —— 极度简化Entity!》中,Teddy运用反射和Emit极度简化了Entity的定义方式。本文将在上文的基础上,用自定义KeyValueCollection类代替原来的Dictionary类承载Entity的数据,从而改善Entity的读写性能,并保持Dictionary的方便的使用接口。为什么Dictionary的性能不好?当然,这里说的性

Teddy's Knowledge Base 873

ASP.Net 2.0 - 使用Ilungasoft Framework加速Web开发

Ilungasoft Framework是Teddy正在开发中的Web快速开发框架,该框架基于.Net 2.0,设计的出发点就是易用性,快速开发,兼顾性能。同时,Ilungasoft Framework也充分利用了许多.Net 2.0中的新特性以简化框架的易用性。本文将以一个Sample Web应用的分析为基础,介绍Ilungasoft Framework的使用。在本文中,您将看到,Il

Teddy's Knowledge Base 838

正解TDD

<br />本文的目的是以最精炼的语言,正解什么是TDD,为什么要TDD,和TDD的难点。 <br />什么是TDD? 简单的说,TDD = 测试先行(TFD, Test First Development) + 重构(Refactoring) + 回归测试(Regression Test)。<br /><br /><br />如果要实现某个功能,TDD要求在初步定义完这个功能的外部接口之后,先根据这个功能的用例写测试代码(黑盒测试),测试代码检验的是这个功能的外部接口的使用场景,而非具体的实现细节。然后,

Teddy's Knowledge Base 836

Apply SOA Design Patterns with WCF (2) WCF Automatic Deployment (自动化部署)

Original (原创) by Teddy’s Knowledge Base Content (目录) (1) WCF Configuration Centralization (WCF配置集中管理) (2) WCF Automatic Deployment (WCF自动化部署) (3) WCF Automatic Service Locating (WCF自动化服务定位) (4)

Teddy's Knowledge Base 827

RK3568 生产写SN实战:基于 RKDevInfoWriteTool 的序列号烧录方案

RK3568 生产写SN实战:基于 RKDevInfoWriteTool 的序列号烧录方案

地方科技部门如何借助数智化平台提升科技项目评审效率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: Apply SOA Design Patterns with WCF (5) WCF Based ASP.NET DataSouce Control (基于WCF的数据源控件)
下一篇: AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试
teddyma
博客等级 码龄25年 5粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值