随笔分类 - WCF
摘要:(转自:http://blog.sina.com.cn/s/blog_5eca668b01018949.html)定义一个类,来对远程X.509证书的验证,进行处理,返回为true.我们要自己定义一个类,然后在客户单调用WCF服务之前,执行一次即可。代码如下:public static class ...
阅读全文
摘要:调用webservice时提示对操作的回复消息正文进行反序列化时出错调用webservice时提示对操作的回复消息正文进行反序列化时出错。主要原因webservice返回值的长度超过readerQuotas中的了maxStringContentLength值,造成返回值截断,不完整,反序列化时出错。 <readerQuotas maxDepth="32" maxStringContentLength="81920" maxArrayLength="16384" maxBytesPerRead="4096" m
阅读全文
摘要:General Design Guidelines通用设计规范1. All services must adhere to these principles:所有的服务必须遵守这些原则:a) Services are secure.服务是安全的。b) Service operations leave the system in a consistent state.服务操作保证系统在一直的状态。c) Services are thread-safe and can be accessed by concurrent clients.服务是线程安全的并且可以被并发的客户端访问。d) Servic
阅读全文
摘要:WCF热门问题编程示例(5):WCF服务如何获取客户端在线用户数量?这个问题是基于WCF学习交流群的Blood提出的问题,一起讨论了下,做的测试。把相关的讨论,以及测试代码,整理成一篇博文。【1】问题分析: 这个问题,在WCF服务编程中也非常的常见,以下是对于这个问题的不同描述形式,但是本质基本类似:WCF如何获取在线客户端数量? WCF如何获取在线用户列表? WCF服务如何知道客户端离线? 如何判断WCF离线客户端? 或许还有别的提法,但是基本都是差不多的。 此类问题出现在回调、双工通信的场景中比较多,有的程序具备类似聊天室的功能,就比较在乎客户端的离线事件。【2】解决办法: 这里服务端对于
阅读全文
摘要:WCF热门问题编程示例(4):WCF客户端如何异步调用WCF服务?How to call WCF Service asynchronously?【1】问题描述:WCF客户端如何异步调用WCF服务?How to call WCF Service asynchronously?关于WCF如何实现异步调用的问题,论坛上出现了很多帖子,也有很多讨论的文章,包括MSDN也给出了详细的学习资料和示例代码。但是很多资料过于笼统,MSDN的例子有点复杂。而我们实际项目中,要实现的需求,往往十分简单,就是要在客户端实现对于WCF服务操作的异步调用,也就是call WCF Service asynchronous
阅读全文
摘要:IOCP是Windows IO模型中最复杂和成熟的一个模型,它是用来解决大规模并发客户端请求的问题。这个模型已经在很多Windows API中应用。在.NET FrameWork的类库里,也有很多类使用里IOCP模型,最显著的例子就是Thread类。WCF中也有关于大规模并发请求的问题,但是我们从很多官方的资料里听说的词语往往是并发控制,或者是限流等词语。作为分布式环境下心的通信框架,WCF确实面临这样的问题,如何处理大规模并发客户端请求。IOCP模型如此优秀,WCF到底是用了没有,或者在内部机制中是否支持IOCP. 这个问题是由@冰红茶提出,因为我个人对IOCP不是很专业,就一直查资料来确.
阅读全文
摘要:今天是《WCF热门问题编程示例》系列的第二个问题。WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗。原文在MSDN中文论坛出现过,一直没有人解答,当时楼主的实验方式式两个客户端掉一个服务操作,结果出现等待问题,他当时的疑惑是不是WCF在相应客户端请求的时候需要等待排队。WCF服务响应客户端请求时是否是依次响应的。今天我做了实验,写了测试代码,和大家分享一下具体的心得体会。也好给大家一个参考。下面我们来进入详细的问题讨论,首先是问题的来源。【1】问题来源: 这个问题来自于MSDN中文技术论坛,闲置很久,yangjian15 提出的“WCF一个疑惑?,原帖地址:htt
阅读全文
摘要:今天新开了一个系列文章《WCF热门问题编程示例》:主要是针对WCF里比较有价值的问题的收集和整理,进行分析和 编程实践。最后会给出具体的示例代码。这个系列的第一篇文章:WCF热门问题编程示例(1):WCF服务如何获得客户端IP地址信息。这个问题是在MSDN中文论坛一个网友xiaochong4提出的,原文是: 服务端通过getcallbackchannel可以取得回调的引用,对回调的调用肯定会有IP地址和端口的信息,有没有办法在服务端编程取得回调的endpoint信息.,查了好久资料没查到,大侠指教下。原文连接地址:http://social.microsoft.com/Forums/zh-CN
阅读全文
摘要:如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。using (CnblogsWcfClient client = new CnblogsWcfClient()){client.Say("Hello, cnblogs.com!"); }上面这段代码看上去没问题,CnblogsWcfClient是一个自动生成的WCF客户端代理,继承自System.ServiceModel.ClientBase。using语句结束时,会调用ClientBase实现的System.IDisposable.Dispose接口,实际就是调用ClientBase的C
阅读全文
摘要:在上一篇文章中,我们通过自定义InstanceProvider实现了WCF和微软Enterprise Library Unity Application Block的集成, 今天我们已相同的方式实现WCF与Enterprise Library的另一个Application Block的集成:Policy Injection Application Block (PIAB)。PIAB,通过Method Interception的机制实现了AOP(Aspect Oriented Programing)。按照PIAB的编程方式,我们将非业务逻辑,比如Caching、Authorization、Tra
阅读全文
摘要:松耦合、高内聚是我们进行设计的永恒的目标,如何实现这样的目标呢?我们有很多实现的方式和方法,不管这些方式和方法在表现形式上有什么不同,他们的思想都可以表示为:根据稳定性进行关注点的分离或者分解,交互双方依赖于一个稳定的契约,而降低对对方非稳定性因素的依赖。从抽象和稳定性的关系来讲,抽象的程度和稳定程度成正相关关系。由此才有了我们面向抽象编程的说法,所以“只有依赖于不变,才能应万变”。然后,对于面向对象的思想来讲,我们的功能通过一个个具体的对象来承载。对象是具体的,不是抽象的;创建对象是必然的;对象的创建从某种程度上即使对面向抽象的违背。所以模块之间的耦合度在很大程度上是由于对象创建的方式决定的
阅读全文
摘要:在上一篇文章中,我们讨论了如何通过CallContextInitializer实现Localization的例子,具体的做法是将client端的culture通过SOAP header传到service端,然后通过自定义的CallContextInitializer设置当前方法执行的线程culture。在client端,当前culture信息是通过OperationContext.Current.OutgoingMessageHeaders手工至于SOAP Header中的。实际上,我们可以通过基于WCF的另一个可扩展对象来实现这段逻辑,这个可扩展对象就是MessageInspector。我们
阅读全文
摘要:在本系列的每篇文章中,我多次提到WCF是一个极具可扩展性的分布是消息通信框架。为了让读者对WCF Extension有一个总体的的认识,在这里我会简单列举了我们经常使用的绝大部分的扩展点,以及通过这些扩展点能够解决实现项目开发中的那些问题。有一点需要特别提醒的是:对WCF extensions的灵活应用依赖于你对channel layer和service mode dispatching system的深入理解。所以,如果你对channel layer不甚了解,可以参阅本系列的第一个部分(WCF是如何通过Binding进行通信的)和第二部分(如何对Channel Layer进行扩展——创建自定
阅读全文
摘要:在本系列的第一部分、第二部分中,我们对WCF的channel layer进行了深入的讨论。我们接下来继续讨论WCF的service mode layer。本篇文章着重介绍service 端的ServiceMode。写作此篇文章旨在达到以下两个目的:希望读者对ServiceMode有一个大致的了解,结合前面介绍的channel layer的相关知识,帮助读者了解WCF的整个实现机制和执行的流程。 介绍ServiceMode涉及到的绝大部分extension point,让读者在具体的项目开发中能够根据实际的需要灵活、自由地对WCF进行扩展。 较之channel layer,ServiceMode
阅读全文
摘要:SliverLight捕捉WCF服务异常,1 Contract[ServiceContract] public interface IWCFService { [OperationContract] int DoWork(int a,int b); [OperationContract] int DoWork2(int a, int b); [OperationContract] int DoDevide(int a, int b, ref string errorMessage); [OperationContract] int Devide(int a, int b, ref Except
阅读全文
摘要:一、One-way MEP V.S. Responsible Service我们知道MSMQ天生就具有异步的特性,它只能以One-way的MEP(Message Exchange Pattern)进行通信。Client和Service之间采用One-way MEP的话就意味着Client调用Service之后立即返回,它无法获得Service的执行结果,也无法捕捉Service运行的Exception。下图简单表述了基于MSMQ的WCF Service中Client和Service的交互。但是在有些场景 中,这是无法容忍的。再拿我在上一篇文章的Order Delivery的例子来说。Clien
阅读全文
摘要:一、为什么要使用MSMQ在一个分布式的环境中,我们往往需要根据具体的情况采用不同的方式进行数据的传输。比如在一个Intranet内,我们一般通过TCP进行高效的数据通信;而在一个Internet的环境中,我们则通常使用Http进行跨平台的数据交换。而这些通信方式具有一个显著的特点,那就是他们是基于Connection的,也就是说,交互双方在进行通信的时候必须保证有一个可用的Connection存在于他们之间。而在某些时候,比如那些使用拨号连接的用户、以及使用便携式计算机的用户,我们不能保证在他们和需要访问的Server之间有一个的可靠的连接,在这种情况下,基于Messaging Queue的连
阅读全文
摘要:在一个基于面向服务的分布式环境中,借助一个标准的、平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互。这个交互的过程实际上就是Message Exchange的过程。WCF支持不同形式的Message Exchange,我们把这称之为Message Exchange Pattern(MEP), 常见的MEP包括: Request/Reply,Request/Forget(One-way)和Duplex。通过采用Duplex MEP,我们可以实现在Service端Callback Client的操作。虽然WCF为我
阅读全文
摘要:在任何Application的开发中,对不可预知的异常进行troubleshooting时,异常处理显得尤为重要。对于一般的.NET系统来说,我们简单地借助try/catch可以很容易地实现这一功能。但是对于 一个分布式的环境来说,异常处理就没有那么简单了。按照面向服务的原则,我们把一些可复用的业务逻辑以Service的形式实现,各个Service处于一个自治的环境中,一个Service需要和另一个Service进行交互,只需要获得该Service的描述(Description)就可以了(比如WSDL,Schema和Strategy)。借助标准的、平台无关的通信构架,各个Service之间通过
阅读全文
摘要:无论对于Web Service还是WCF,Client和Service之间交互的唯一形式是通过发送和接收Soap Message。在我们对Web Service和WCF进行深入学习的时候,借助一些Soap Trace 工具对Soap Message进行深入剖析是非常有必要的。在这些工具之中,我觉得最好用的就是Microsoft Soap Toolkit中的Soap Trace Utility和tcpTrace。我们今天就来讲讲如何在WCF中使用tcpTrace这个工具。首先我们来讲讲tcpTrace实现的基本原理。说的简单点TcpTrace就是一个监听/转发器(Listening/Forwar
阅读全文