如果将模拟使用在WCF上面,就意味着WCF可以模拟客户端身份(而不是启动寄宿进程的Windows帐号)执行服务操作。这篇文章主要介绍WCF关于模拟的编程。...在采用WCF认证的情况下,我们可以通过当前ServiceSecurityContext的WindowsIdentity或者PrimaryIdentity获取到代码认证客户端的WindowsIdentity...这种在服务操作实现中通过编程的方式实现身份模式可以将服务操作的部分逻辑在模拟的客户端身份下执行。...但是服务端是否可以根据WindowsIdentity获取客户端身份信息,是否可以模拟客户端身份访问某些安全资源,这取决于该WindowsIdentity的模拟级别。...身份模拟密切地关系到被模拟身份代表的用户的安全,所以模拟级别应该通过客户端自行控制。在WCF安全体系中,该模拟级别是在客户端提供的Windows凭证中指定。
前面介绍Windows认证和用户名/密码认证这两种典型的客户端认证模式,我们最后来介绍最后一种客户端认证方式,即客户端凭证类型为X.509证书时服务端采用的认证,简称为证书认证。...该类型实际上是对一个X509Certificate2类型对象的封装,我们可以通过两个SetCertificate方法重载以证书引用的方式指定某个具体的X.509证书作为客户端的凭证。...ChannelFactory设置了一个基于X.509证书的客户端凭证。...关于基于证书的客户端认证,你可以与基于证书的服务认证进行类比。...下面给出了服务端进行客户端证书认证模式设置对应的相关类型的定义。
结束了服务认证的介绍之后,我们接着介绍WCF双向认证的另一个方面,即服务对客户端的认证,简称客户端认证。...客户端认证采用的方式决定于客户端凭证的类型,内容只要涉及基于以下三种典型客户凭证类型的认证:Windows、用户名和X.509证书。从编程的角度来讲,Windows认证是最为简单的认证方式。...在这种认证方式下,客户端进程运行的Window帐号对应的Windows凭证被自动作为调用服务的客户端凭证,所以无需显示指定具体的Windiws凭证。...如果需要另一个Windows帐号的名义调用服务,客户端就需要通知指定Windows帐号和密码的方式显式地进行客户端Windows凭证的设置。...Windows凭证在WCF通过类型WindowsClientCredential表示。
对于基于Internet的应用,基于用户名和密码的认证方式是最为常用的,而WCF为你提供了不同模式的用户名认证方式。首先还是从用户凭证的表示说起。...public string Password {get; set; } 10: public string UserName { get; set; } 11: } 用户名/密码凭证在客户端的设置很容易...WCF为你提供了如下三种方式来验证凭证中用户名是否和密码相符: Windows:将用户名和密码映射为Windows帐号和密码,采用Windows认证; MembershipProvider:利用配置的MembershipProvider...,采用Message安全模式,客户端凭证类型被设置为UserName; 服务应用了一个配置名称为membershipAuthentication的服务行为,该行为中通过<serviceCertificate...typeof(CalculatorService))) 6: { 7: host.Open(); 8: Console.Read(); 9: } 接下来我们需要对客户端的配置进行相应的调整
【C++】vector 常用成员函数的模拟实现 1. vector 常用成员函数的模拟实现 2. vector 常用成员函数实现后的测试 #include #include<iostream...()); for (auto e : v) { push_back(e); } }*/ void swap(vector& v) { //注意这里用的是库函数...swap,因为我们这里是在自己实现vector成员函数 std::swap(_start, v....(size_t n) { //要加判断,因为当n<capacity时,不需要做处理 if (n > capacity()) { //这里需要先保存大小,因为开辟新空间后,成员函数...size里的地址_finish还指向销毁的旧空间, //无法正确完成_finish的更新 size_t sz = size(); T* tmp = new T[n]; if
并且,微软已经正式推出了 OData SDK,包含了 .NET、Java、PHP、Palm WebOS 和 iPhone 的支持。其中 .Net OData 客户端基于 Apache 授权开源。...在微软的解决方案中,是用WCF来处理所有程序间的通信,针对数据通信,WCF Data Services自然是最好的选择。...,然后使用Reflection Provider实现一个IQueryable接口的数据源: using System; using System.Collections.Generic; using...Service,通过Visual Studio的添加服务引用生成服务的客户端代码,还可以使用一个插件Open Data Protocol Visualizer查看服务返回的OData数据数据,这个工具的获取和安装可以参看...客户端的代码也非常简单; using System; using System.Collections.Generic; using System.Linq; using System.Text;
宿主一个Web Api 如何通过浏览器或者Fiddler访问Web Api 如何在Api上启用OData uri查询 如何用WCF Web Test Client测试WCF Web API 1、创建一个基本的解决方案...选择是基于响应可得的表现形式(根据不同的维度,响应会不同;例如,语言,内容编码,等等)和请求消息里特定的头域或关于请求的其他信息(如:网络客户端的地址)。...服务器驱动协商是有优点的,当从可行的表现形式里进行选择的算法对用户代理进行描述是比较困难的时候,或者当服务器期望发送“最好的猜测”给客户端而只通过一个响应(以避免后续请求的回路(一个请求会返回一个响应)...8、启用OData 查询支持 Web API支持OData协议,接受OData的URI格式查询,当OData 查询到达Web Api, 在返回客户端之前在服务端会进行必要的过滤和排序。...查询使用IQueryable 接口,服务端并没有去查询所有的数据,发送过滤和排序到服务端。
一、异常的抛出与Close的失败 一般情况下,当服务端抛出异常,客户客户端的服务代理不能直接关闭,WCF在执行Close方法的过程中会抛出异常。我们可以通过下面的例子来证实这一点。...WCF服务在客户端的调用程序如下所示: 1: using System; 2: using System.ServiceModel; 3: using Artech.ExceptionHandlingDemo.Contracts...在上面一篇文章中,我们就谈到过:WCF通过信道栈实现了消息的编码、传输及基于某些特殊功能对消息的特殊处理,而绑定对象是信道栈的缔造者,不同的绑定类型创建出来的信道栈具有不同的特性。...一般情况下,对于客户端来说,信道在下面两种情况下状态会变成Faulted: 调用超时,抛出TimeoutException 调用失败,抛出CommunicationException 所以正确的客户端进行服务调用的代码应该如下面的代码所示...下面的代码演示了基于ChannelFactory创建服务代理的WCF客户端编程方式,对于直接通过强类型服务代理(继承ClientBase的服务代理类型)进行服务调用具有相同的结构。
如果它的内容发生了变化怎么办? 本篇将介绍一款Python的HTTP客户端模拟工具 - HTTPretty,由Gabriel Falcão创建,可以完整地伪造TCP socket模块。...2、简介 HTTPretty是一个Python库,它将模块socket和ssl与在TCP连接级别拦截HTTP请求的虚假实现进行交换,也就是它提供了一个完整的伪造TCP socket模块,它的灵感来自Ruby...的FakeWeb。...httpretty.reset() # 重置HTTPretty状态(清理已注册的URL和请求历史记录) 2、在生成响应体的回调中进行断言 #!...,用于拦截对特定主机的所有请求。
在.NET中,早期是用Remoting/Webservice来处理所有程序间的通信,从.NET 3.0开始使用WCF统一了通信模型,ASP.NET MVC4的推出,形成大的One ASP.NET战略,增加了...最后,决定想要查询的东西,通过比如邮政编码来查询。 首先是,没有创建泛型客户端的途径,而这些和API紧密联系,因为它不知道参数的顺序或者模式被使用的顺序。...因为不能创建泛型客户端,你必须为每一个你希望暴露的API创建客户端。简单的基础HTTP API可以实现,但其仍旧很昂贵。逐渐增多的多样性客户端与这些API通信加剧了这个问题。 ...服务试图比单一应用要获得更长久一些,因此你需要以一种方式设计API,使其能够持久,所以如果你发现你需要添加服务借口的新版本可不太好办,比如创建新的客户端。...在很多案例中,服务开发者和客户端开发者并不是同一个人,因而改变服务接口简直就是不可能的事情。 通过OData,我们采取不同的方法。
在单例模式下,WCF通过创建一个唯一的服务实例来处理所有的客户端服务调用请求。..._result; 16: } 17: } 18: } 在客户端,通过ChannelFactory创建两个服务代理,模拟两个不同的客户端。...从最终输出来看,得到的结果并不能反映出具体某个客户端正常的累加运算(对于通过calculator2模拟的客户端,仅仅调用了一次Add(3),得到的结果却是6)这是所有客户端一起累加的结果,这就是服务实例的单一性造成...倘若客户端采用默认的超时时限(1分钟),对于60个并发地服务调用请求,至少会有一个服务调用会失败。这极大地降低了WCF服务的可扩展性、响应能力和可用性。...,通过ThreadPool模拟5个并发的客户端,在Add操作调用成功后输出当前的时间,从而检验服务的响应能力。
从 .NET 3.5 开始 WCF 已经支持用 WebHttpBinding 构建 RESTful Web 服务,基于 WCF 框架的 RESTful Web 服务还是建立在 WCF Message 栈上...,还是基于RPC风格的,因为 REST 的工作原理有所不同,它不需要依赖 SOAP 协议,因此 WCF 消息管道对于它经过了特殊的消息优化。...但 REST 集成在 WCF 消息管道上还是不理想,所以微软重新开始构造基于Http 协议特点的RESTful的Web API, 从2010年10月份开始把代码放在codeplex上http://wcf.codeplex.com...几个月之前WCF和ASP.NET 团队合并,把WCF Web API的内容并入了ASP.NET Web API,目前WCF Web API的所有功能并没有完成移植,将在ASP.NET Web API正式发布的时候完成移植...让Web API的返回值变成IQueryable,Web API会自动启用OData query conventions。
通过这一规定性的指南文档(其中包括指南、常见问题回答、最佳实践), 你可以一目了然地获知如何你的WCF服务的安全性。...本篇指南是patterns & practices、WCF团队成员以及行业专家共同协作的成果。...通过本篇指南,可以了解到WCF的安全性,如何为服务的通信设计提供授权和认证,提供了使用WCF进行通用的分布式应用开发的解决方案模式,同时还给出了改善服务安全因素的原则、模式与实践。...安全基础 2、Web Services的威胁与应对 3、Web Services的安全设计指南 4、WCF安全基础 5、WCF中的授权、认证与身份 6、WCF中的模拟与委托 7、消息与传输安全 8、绑定...从Web网到远程WCF 12、局域网——使用传输安全(源调用者,TCP)从Windows窗体到远程WCF 13、互联网——使用传输安全(受信赖子系统,HTTP)从WCF和ASMX客户端到远程WCF 14
[第1篇] 通过一个ASP.NET程序模拟WCF基础架构 本系列的第一篇,我将会对WCF的基本架构作一个大致的讲解。...不过,一改传统对WCF的工作流程进行平铺直叙,我将另辟蹊径,借助于我们熟悉的ASP.NET作为请求处理平台,通过一个简单的托管程序模拟整个WCF客户端和服务端的架构。源代码从这里下载。...随着时间的推移,不可避免地,我们会面临着数据契约版本的变化,比如数据成员的添加和删除、成员名称或者命名空间的修正等,如何避免数据契约这种版本的变化对客户端现有程序造成影响,就是本节着重要讨论的问题。...服务契约关注于对服务操作的描述,数据契约关注于对于数据结构和格式的描述,而消息契约关注的是类型成员与消息元素的匹配关系。 我们知道只有可序列化的对象才能通过服务调用在客户端和服务端之间进行传递。...的元数据发布,针对这两种不同的协议,元数据获取的实现方式也是不同的,本片文章中通过自己的方式进行元数据获取,可以看成是对WCF客户端元数据框架的模拟。
在《通过一个模拟程序让你明白ASP.NET MVC是如何运行的》一文中我通过一个普通的ASP.NET Web程序模拟了ASP.NET MVC的执行流程,现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序...我们只模拟WCF完成一个简单的服务调用所必需的组件和流程,右图反映了进行服务调用的必要步骤和使用的相关WCF组件。...WCF服务端框架所需的组件以只读属性的方式体现在WcfHandler上。...组件的工厂 对于本例来说,客户端和服务端需要的组件主要有四类,即消息编码器工厂、分发消息格式化器、客户端消息格式化器和操作调用器。...WCF服务请求的映射到相应的WCF服务调用请求,为此我们定义了如下一个实现了System.Web.IHttpModule接口的WcfHttpModule类型。
七、参数和返回值的释放 八、身份模拟 总结 接下来,我们同样从可扩展的角度来分析DispatchOperation,下面的代码片断列出了所有可供扩展的属性。...如果要将执行结果正确地回复给客户端,需要将它们进行序列化成消息。...举个例子,在《WCF技术剖析(卷1)》的第10章,我分别采用自定义ClientMessageInspector和CallContextInitializer实现了上下文信息从客户端到服务端的自动传播。...Impersonation在《模拟在WCF中的应用》已经详细介绍过了,用以表示是否在模拟客户端身份上下文中执行服务操作。...WCF服务端运行时架构体系详解[上篇] WCF服务端运行时架构体系详解[中篇] WCF服务端运行时架构体系详解[下篇] WCF服务端运行时架构体系详解[续篇]
WCF客户端和服务端的框架体系相互协作,使得开发人员可以按照我们熟悉的方式进行异常的处理:在服务操作执行过程中抛出异常(FaultException),在调用服务时捕获异常,完全感觉不到“分布式”的存在...为了实现这样的效果,WCF在内部为我们作了很多。 消息交换是WCF进行通信的唯一手段,消息不仅仅是正常服务调用请求和回复的载体,服务端抛出的异常,甚至是服务的元数据都是通过消息的形式传向客户端的。...反序列化的结果即实现对FaultException的重建,WCF最终将重建的FaultException异常抛出,对于最终的开发者而言,感觉就像服务端抛出的FaultException直接被客户端捕获了一样...WCF的服务端和客户端均需要一个FaultFormatter对象,分别用于对FaultException异常对象的序列化和反序列化,现在我们分别介绍FaultFormatter对象在服务端和客户端是如何被创建的...在客户端运行时初始化过程中,WCF为每一个操作创建ClientOperation对象(《WCF技术剖析(卷1)》第8章对整个WCF客户端执行流程有详细的介绍)。
但是基于WCF的编程语言是C#、VB.NET这样的完全面向对象的编程语言,而WCF服务却是基于面向服务的。...WCF在进行元数据发布的时候,会自动按照这样的命名机制创建数据契约,并以XSD的形式发布出来。所以当客户端导入元数据生成客户端代码的时候,生成的等效数据契约的类型名称就是这个经过拼接的名称。...: WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 WCF技术剖析之二:再谈IIS与ASP.NET管道 WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 WCF技术剖析之四:...基于IIS的WCF服务寄宿(Hosting)实现揭秘 WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting...WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理 WCF技术剖析之十一:异步操作在WCF中的应用(上篇) WCF技术剖析之十一:异步操作在WCF中的应用(下篇) WCF技术剖析之十二:数据契约
和传统的分布式通信框架一样,WCF本质上提供一个跨进程、跨机器以致跨网络的服务调用。在本例中,客户端和服务通过运行在相同的同一台机器上不同进程模拟,图1体现了客户端和服务端进程互相调用的关系。 ?...客户端通过另一个控制台应用模拟(进程为Client.exe)。接下来,我们就一步一步来构建这样的一个WCF应用。 步骤一:构建整个解决方案 通过VS 2008创建一个空白的解决方案,添加如下四个项目。...项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集; Client:一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode...通过应用ServiceContractAttribute特性将接口定义成服务契约之后,接口的方法成员并不能自动成为服务的操作。...松耦合是SOA的一个基本的特征,WCF应用中客户端和服务端的松耦合体现在客户端只须要了解WCF服务基本的描述,而无须知道具体的实现细节,就可以实现正常的服务调用。
1: internal class HttpModule : IHttpModule 2: { 3: //其他成员 4: public void Init(HttpApplication...当我们通过执行案例7-2中的代表客户端应用程序后,EventLog中WindowsLog的Application分组中,会多出两个日志项目(之前已经将日志清空),如图1所示。 ?...将不会生效; 身份模拟(Impersonation):即使通过配置允许身份模拟,WCF Service总是运行在IIS进程账号下。...HttpModule异曲同工; 基于操作的身份模拟(Impersonation):WCF自身也提供了基于操作的身份模拟实现。...AspNetCompatibilityRequirementsMode.Allowed)] 3: public class CalculatorService:ICalculator 4: { 5: //省略成员