WCF/WPF公司内部订餐程序开发
摘要:WCF/WPF公司内部订餐程序开发 (服务端篇)上班的第一天,群里讨论关于订餐的问题,所以想到了要不要自己开发一个公司内部的订餐系统呢?方便公司内部员工的订餐,有了想法就简单的实践了下 。实现还是很简单的,因为只是自己内部使用,所以没有考虑太多的因素。数据库选用的Ndatabase,之所以用到数据库其实开始的想法是希望添加一个自动推荐食物的功能的.1. 新建一个类库工程QSnack.Contract(服务契约工程),结构: 我们定义了三个服务接口:1) IUserService : 用户服务接口,用户的注册/注销/积分/用户信息更新, 基于basicHttp协议. [ServiceCon...
阅读全文
wcf传输Dataset大数据量 -压缩(一)
摘要:wcf传输Dataset大数据量 -压缩(一)由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为查询集合的首选返回类型,但是由于DataSet会生成很多的状态信息等,所以DataSet体积也会变大,有几种改变DataSet大小的方法。1、将DataSet的RemotingFormat属性设置为Binary (默认是xml)2、使用开源的压缩组件“ICSharpCode.SharpZipLib.dll”进行压缩不言而喻。所以推荐大家使用DataSet的时候,最好设置成二进制。最后压缩成Byte[]以后,作为返回类型。分类:WCF
阅读全文
消息协定
摘要:消息协定第七章 消息协定7.1 消息协定概述通常情况下,在定义消息的架构时只使用数据协定就足够,但是有时需要精确控制如何将类型映射到通过网络传输的SOAP消息。对于这种情况,通常解决方案是插入自定义的SOAP标头。此外还可以定义消息头和正文的安全属性,通过确定是否对这些元素进行数字签名和加密,消息样式的操作可提供这种控制。消息样式的操作最多具有一个参数和一个返回值,其中参数和返回值的类型都是消息类型,即这两种类型可直接序列化为指定的SOAP消息结构。消息协定可以是用MessageContractAttribute标记的任何类型或Message类型。如下所示:?[OperationContrac
阅读全文
数据协定
摘要:数据协定--前言 最近各种事忙的把之前的WCF学习给耽误了一些,今天抽时间把之前的学习内容给总结了一下,因为知识点比较细碎没有做太多的练习示例,只是对其中关键的知识点做了总结,希望可以对大家有所帮助。第六章 数据协定6.1 数据协定的概述默认的情况下WCF使用称之为数据协定序列化程序的序列化引擎对数据进行序列化和反序列化,所有的.NET Framework基元类型,如整型、字符串型,以及某些被视为基元的类型,如DateTime、XmlElement不需要做其他工作就可以被序列化,并被视拥有默认的数据协定。在通常情况下通过DataContractAttribute属性应用到新建的复杂类型来完成复
阅读全文
WCF 消息压缩性能问题及解决方法
摘要:WCF 消息压缩性能问题及解决方法最近使用WCF作为通迅框架开发一套信息系统,系统使用传统C/S框架,系统有可能会部署在互联网上,因此决定对传输的数据进行GZIP压缩,原来在使用.NET Remoting时,可以使用插入自定义的ChannelSink来实现数据压缩,作为.NET Remoting的替代方案的WCF,实现起来也很容易,且方法不止一种,主要解决方法主要有以下四种:通过自定义MessageEncoder和MessageEncodingBindingElement 来完成。具体的实现,可以参阅张玉彬的文章《WCF进阶:将编码后的字节流压缩传输》和MSDN的文章《Custom Messa
阅读全文
继承在WCF中的问题和解决办法
摘要:继承在WCF中的问题和解决办法1. 问题假设有代码如下:[ServiceContract]public interface IA{ [OperationContract] string M1();}[ServiceContract]public interface IB : IA{ [OperationContract] string M2();}public class A : IA{ public string M1() { return "this is M1"; }}public class B : A, IB{ publi...
阅读全文
WCF学习笔记之事务编程
摘要:WCF学习笔记之事务编程一:WCF事务设置事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元;WCF通过System.ServiceModel.TransactionFlowAttribute特性定义在契约的相应操作方法上;TransctionFlowOption三个选项:NotAllowed、Allowed、Mandatory不同的事务流转策略;1:NotAllowed(默认) 客户端的事务不会允许被流转到服务端,服务端也不会试图去接收流入的事务;2:Allowed 如果客户端的事务在,则被流转到服务端,服务端会试图去接收流入的事务;3:Mandatory 客户端必须在一个
阅读全文
WCF学习笔记之传输安全
摘要:WCF学习笔记之传输安全最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点;本文的内容均来自[WCF全面解析]下册;WCF的传输安全主要涉及认证、消息一致性和机密性三个主题;认证是双向认证(服务端与客户端互认证);一致性传输内容不被篡改;机密性不被乱读取;三个安全行为:认证、授权、审核WCF两种安全模式:Transport安全模式、Message安全模式(1)Transport安全模式 优点:比Message高性能 局限:依赖具体的传输协议,只能提供基于点对点,不得不在传输层解决客户端的认证; Intranet是Transport安全模式的..
阅读全文
.net SoapHeader验证
摘要:.net SoapHeader验证在工作中经常用到webservice,在.net 开发中经常用到webservice,在java开发经常用到cxf. 今天闲置没事就介绍下 .net webservice中常用到 soapheader token验证和重载。当然在正常使用中不太建议使用重载。下面的列表概述接收和处理 SOAP 标头的基本步骤:创建一个从SoapHeader派生的类,表示传入 SOAP 标头的数据。 using System.Web.Services.Protocols;namespace WService{ /// /// Fireran /// ...
阅读全文
WCF心跳判断服务端及客户端是否掉线并实现重连接
摘要:WCF心跳判断服务端及客户端是否掉线并实现重连接本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断;若掉线时服务器或客户端又在线时将实现自动重连;将通过WCF的双工知识以及相应的心跳包来实现此功能;首先了解一下本实例的一个分层架构图;相信了解WCF对这个分层法肯定都很了解;其中Client为客户端,Interface为契约层,Service则是实现契约的服务层;接下来我们将对各层进行一个简单的讲解;方便大家理解实例的实现方式;首先我们了解契约层Interface;因为我们利用WCF中的双工知识,所以此处我们定义的两个接口,其中ICallback为回调接口;IPushMes
阅读全文
WCF小实例以及三种宿主
摘要:WCF小实例以及三种宿主最近一直在学习WCF相关知识,下面将通过一个小实例对所学的知识进行简单的回顾;本实例是一个简单三层操作数据库,并且也简单实现的三种宿主(控制台宿主,IIS宿主以及Windows服务宿主)的练习;还包含一个双工的功能,下图为程序所创建分层结构图;首先了解为这个实例所创建的两张简单表;USE [TestDb]GO/****** 对象: Table [dbo].[T_Account] 脚本日期: 07/31/2013 23:09:27 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [d...
阅读全文
WCF引用方式
摘要:WCF之各种WCF引用方式写在开头:本文内容来自 WCF全面解析中的一个经典例子,如果你已经看过了,那么可以忽略本文,本文旨在和大家分享不一样的WCF使用方法。准备工作:1.创建解决方案WCFService(当然名字可以任意哦)依次添加四个项目,如上图,Client和Hosting为控制台应用程序,Service和Service.Interface均为类库。2.引用关系Service.Interface:定义服务契约(Service Contract)接口,引用WCF核心库System.ServiceModel.dll;Service:定义服务的项目,由于需要实现具体的服务,而服务契约在Ser
阅读全文
WCF 框架运行时类图
摘要:WCF 框架运行时类图本文画出了 WCF 框架运行时的重点类之间的类关系图。Binding一个 Binding 由多个 BindingElement 组成。BindingElement 作为主要的扩展点。每一个 BindingElement 描述某个独立的行为。最终 Binding 使用一连串的 BindingElement 来生成Channel。DescriptionDescription 表示服务的元数据,用于描述服务本身。一个服务包括多个终结点,一个终结点对应一个绑定、对应一个契约、多个操作。而服务、终结点、契约、操作,都可以附加多个行为来对其进行控制。Behaviors下面是四类行为用
阅读全文
WCFRESTFul服务搭建及实现增删改查
摘要:WCFRESTFul服务搭建及实现增删改查RESTful Wcf是一种基于Http协议的服务架构风格, RESTful 的服务通常是架构层面上的考虑。 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求,无需去实现复杂的客户端代理,无需使用复杂的数据通讯方式既可以将我们的服务暴露给任何需要的人,无论他使用 VB、Ruby、JavaScript,甚至是 HTML FORM,或者直接在浏览器地址栏输入 WCF 中通过 WebGetAttribute、WebInvokeAttribute (GET/PUT/POST/DELETE)、UriTemplate 定
阅读全文
构建RESTful风格的WCF服务
摘要:构建RESTful风格的WCF服务RESTful Wcf是一种基于Http协议的服务架构风格。 相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。RESTful的几点好处:1、简单的数据通讯方式,基于HTTP协议。避免了使用复杂的数据通讯方式。2、避免了复杂的客户端代理。3、直接通过URI资源定向即可把服务暴露给调用者。下面使用一个简单的demo项目来看看啥是RESTful Wcf。1、项目结构【VS2010+.net 4.0】:2、接口定义:定义了2个方法,分别代表GET、POST典型请求方式。 1 using Sy
阅读全文
WCF服务属性注入基础设施
摘要:WCF服务属性注入基础设施WCF的服务的创建行为:使用默认构造函数创建WCF服务对象。如果我们想要在WCF内使用外部对象,最简单的方式就是把外部对象做成全局对象。然而这样的话会增加全局对象的数量,让代码的耦合度增加了。所以,我们需要突破WCF的默认行为。解决的办法是添加自定义的ServiceHost子类。首先,添加一个IWCFService泛型接口,WCF服务将继承这个接口,从而拥有外部注入泛型属性的能力。?publicinterfaceIWCFService{TDependency Dependency { get; set; }}其次,我们需要自定义ServiceHost子类,提供外部注入
阅读全文
服务承载
摘要:服务承载这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决。所以在这一章节中,有一个承载是没有例子的。仍在努力解决所在的问题,后续会把例子给补上的。好了,进入正题。要变为活动状态,服务必须承载于创建它并控制它的上下文和生存周期的运行环境中。WCF有以下三种承载方式:在IIS中承载、在Windows进程激活(WAS)中承载、在托管应用程序中承载(自承载)。下面就分别对这三种承载方式,一一介绍。1. 在IIS中承载1.1 概述WCF可以方便的通过IIS承载,此承载模型与ASP.NET和ASP.NET Web Ser
阅读全文
事务编程与可靠会话
摘要:事务编程与可靠会话WCF把书读薄(3)——数据契约、消息契约与错误契约 真不愧是老A的书,例子多,而且也讲了不少原理方面的内容,不过越读越觉得压力山大……这次来稍微整理整理事务和可靠会话的内容。 十八、事务编程 WCF的分布式事务编程,指的是在客户端定义一个事务范围,在这个范围内对WCF服务进行连续调用,可以实现其中一个出现问题整体回滚的效果。由于WCF依赖于MSDTC,所以首先需要开启MSDTC服务才能够通过WCF进行分布式事务编程。 这里我也自己写了一个典型的银行转账的练习,首先需要建立一个数据库,数据表只有一张Account表,其中有AccountId和Money两个int型...
阅读全文
WCF 学习笔记之异常处理
摘要:WCF 学习笔记之异常处理1:WCF异常在配置文件 2:也可以直接在服务上直接用特性进行设定[ServiceBehavior(IncludeExceptionDetailInFaults=true)]public class CalculatorService:ICalculator{}上面两种方式实现的效果是一样的;3:自定义异常信息 (1)直接通过FaultException直接指定错误的信息using System.Serv...
阅读全文
WCF服务承载
摘要:WCF服务承载(笔记)自托管(也做自承载) 承载 WCF 服务最灵活、最便捷的方法就是进行自承载。要能够自承载服务,必须满足两个条件。第一,需要 WCF 运行时;第二,需要可以承载 ServiceHost 的托管 .NET 应用程序。您需要自己动手编写启动和停止宿主的代码。什么时候使用自托管? 当应用程序的各个组件之间需要相互通信,或者在一个本地环境中,客户端和事务的数量都十分受限是常使用自托管。对于企业级方案来说不应考虑自承载方式。自承载适用于企业项目的开发或演示阶段。此外,当您希望用户桌面应用程序进行相互通信或在点对点情况下,可以对服务进行自承载。自承载的优点:•易用性:只需几行代...
阅读全文