yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[下篇]
摘要:yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[下篇]昨天写了《yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]》,引起了一些讨论。关于yield关键字这个语法糖背后的原理(C#编译器将它翻译成什么)其实挺简单,虽然有时候因为误用它会导致一些问题,但是它本无过错。接下来,我们通过这篇短文简单地谈谈我所理解的yield。目录一、先看一个简单的例子二、了解本质,只需要看看yield最终编译成什么三、回到WCF的例子一、先看一个简单的例子我们现在看一个简单的例子。我们在一个Console应用中编写了如下一段简单的程序:返回类型为IEnumerable&l
阅读全文
yield在WCF中的错误使用——99%的开发人员都有可能犯的错误!
摘要:yield在WCF中的错误使用——99%的开发人员都有可能犯的错误!在定义API的时候,对于一些返回集合对象的方法,很多人喜欢将返回类型定义成IEnumerable<T>,这本没有什么问题。这里要说的是另一个问题:对于返回类型为IEnumerable<T>的方法来说,我们可以使用yield return的方式来输出返回集合的元素。但是如果我们不了解yield 关键字背后的实现机制,很有可能造成很大的问题。这是一个WCF相关的问题,我想99%的人都有可能会犯这样的错误——即使你对yield了解得非常透彻。闲话少说,我们通过一个简单的实例来说明这个问题。我们定义了如下一个I
阅读全文
wcf基础知识之ListenUri和ListenUriMode实现 逻辑地址和物理地址的分离
摘要:wcf基础知识之ListenUri和ListenUriMode实现 逻辑地址和物理地址的分离在上一篇博客中介绍了TcpTrace的使用,并且说到要使用TcpTrace最简单的方法就是设置ClientViaBehavior的viaUri的值。但是没有说这个值表示的是什么意思?其实这个值表示的物理地址。其实在物理地址和逻辑地址分离的方面包括两方面的内容:服务端的物理地址和逻辑地址的分离以及客户端的物理地址和逻辑地址的分离,这个如果配合TcpTrace可以很好的说明结果。今天我们要说的是服务端的物理地址和逻辑地址的分离,因为客户端的分离是通过Clientvia实现的,所以那个很简单。要说服务端的物理
阅读全文
wcf基础知识之端口共享 portSharing
摘要:wcf基础知识之端口共享 portSharing现在时间已经是凌晨一点了,我准备了端口共享的内容,但是因为时间太晚,明天还要上班,所以我们就不长篇大徐了,剪短的说明一下内容,让大家明白就可以了。今天来说一下端口共享,什么是端口共享呢?在wcf中,所谓的端口共享其实就是一个服务的地址为http://127.0.0.1:80/calService,而另一个服务的地址也为http:127.0.0.1:80/weatherService,但是端口是一样的,在wcf中这其实是不能运行的。第一个服务启动以后,第二个服务如果要启动的话就会出现异常,为了说明wcf的端口共享,我们仍然是来举个简单的例子说明一下
阅读全文
消息交换模式 response/reply oneway deplex
摘要:wcf基础知识之 查看soap消息 TcpTrace今天本来准备了wcf的三种消息模式wcf 基础知识 之 消息交换模式 response/reply oneway deplex 的介绍,但是考虑到里面有说到soap消息,但是可能还有一些朋友对如何查看soap消息还不是很清楚,所以这次先来把如何查看wcf通信的介质--soap消息介绍一下。其实这个工具的使用非常简单,可以说如果知道了怎么做那是小学一年级的水平,但是我就曾经在这个一年级还浪费了好一些时间,所以为了避免浪费大家的时间,毕竟程序员的时间不是特别多。TcpTrace 专业查看wcf通信的工具,使用非常简单,但是为了演示如何使用这个小工
阅读全文
自定义天气WCF服务接口
摘要:一、概要:此天气WCF使用的是中国天气的Json天气数据接口。另外,由于文章并没有讲解具体的WCF创建过程,所以在文章最后笔者会提供一个笔者自己的完成品以供大家参考。地址:http://m.weather.com.cn/data/101120201.html其中101120201就是每个城市的代码。Json数据的基本结构View Code1 { 2 "weatherinfo": 3 { 4 //基本信息 5 "city":"青岛", 6 "city_en":"qingdao", 7 "
阅读全文
wcf自定义绑定
摘要:wcf自定义绑定一,创建自定义绑定有时候我们需要创建自己的绑定,这在很多情况下不是出于特殊的安全要求和使用的传输协议。为了创建自定义的绑定,需要建立一组绑定元素。绑定元素是由System.ServiceModel.Channels.BindingElement派生而来的。代码1,使用HTTP传输协议和Binary编码格式的自定义绑定: <bindings> <customBinding> <binding name="binHttp"> <binaryMessageEncoding /> <httpTransport /
阅读全文
序列化DataContractSerializer
摘要:wcf基础教程之 数据契约的序列化DataContractSerializer上一篇博客我们说明了数据契约的前身Xml的序列化,这次还是言归正传,回到wcf的技术上来,分析一下DataContractSerializer 。首先我们必须了解wcf默认是通过xml进行数据传输,但是并不意味着就一定要用这种,还有轻量级的json。DataContractSerializer继承自XmlObjectSerializer,是可以直接对.Net对象进行序列化操作,但是DatacontractSerializer的使用更加方便。要使一个类成为数据契约,我们必须要通过DataContractAttribut
阅读全文
使用网站作为WCF服务宿主的几种做法
摘要:使用网站作为WCF服务宿主的几种做法内容摘要这一篇文章探讨使用网站作为WCF服务宿主的几种做法,我将从最基本的svc文件的方式,演化成为无svc文件的方式,并且在最后介绍REST与路由规则结合的做法。本文所讲解的WCF功能,是基于WCF 4.0这个版本。我所采用的开发工具是Visual Studio 2012. 本文范例代码可以通过Web-host-sample.zip 下载。本文不是WCF的入门文档,有关WCF的典型使用场景和一些基础知识,可以参考我之前的两篇文章WCF技术的不同应用场景及其实现分析WCF技术的不同应用场景及其实现分析(续)范例说明本文所采用的范例是相当简单的,我已经定义的合
阅读全文
wcf基础教程之 契约(合同)Contract
摘要:wcf基础教程之 契约(合同)Contract在前几篇博客中我有说到服务的寄宿,就是服务要运行起来必须采取的几种方式,相当于我们可以照葫芦画瓜的效果运行一个wcf服务,但是那只是实践,我们知其然更要知其所以然,所以从今天开始我们开始介绍wcf的三大部分:契约、绑定以及服务。当然这其中会有很多的细节问题,比如说终结点等等,我们穿插着进行。今天就先来预习一下契约,也称为合同(Contract).wcf的契约一共包括几种:数据契约、服务契约、消息契约、错误契约。既然是预习,那么我们就一起来学习一下这几种契约的作用。数据契约:DataContract 是用来对wcf的数据传输进行串行化。说到串行化,.
阅读全文
WCF中的集合类型
摘要:WCF中的集合类型在.net中,各种类型的集合均实现了IEnumerable或者IEnumerable<T>接口,一个数据契约的数据成员可以是一个集合类型,服务契约也可以定义直接与集合交互的操作,但是这都是.net所特有的,WCf不能在元数据中公开它们,然后WCF专门为集合提供了编组原则。 在定义服务时候,无论使用的是IEnumerable<T>、IList<T>和ICollection<T>,他们的传输形式都使用了数组,如namespaceContractInterface{ [ServiceContract]publicinterfaceIC
阅读全文
WCF技术剖析
摘要:WCF技术剖析_学习笔记之一本系列适合新手,从0学起。共同学习,共同探讨。基础概念SOA:就是采用Web服务的架构它有一些特性,需要了解:1、自治的:不依赖于访问它的客户端和其他服务,可以独立的进行部署和实施版本策略和安全策略。2、依赖于开放的标准:让不同的厂商开发的服务能够进行互操作。3、支持跨平台4、鼓励创建可组合的服务5、鼓励服务的复用6、强调松耦合:契约的实现WCF应用实例,帮助理解WCF服务的基本结构过程:1、构建解决方案Contracts:定义服务的契约(接口部分)Services:定义服务的实现(具体逻辑实现)Hostiing:宿主另外还有一个是客户端,位于独立的解决方案中Cli
阅读全文
无服务器端的UDP群聊功能剖析(WCF版)
摘要:无服务器端的UDP群聊功能剖析(WCF版)主要是想弄成一个系列,所以标题中的UDP字段我就没有修改.这篇主要是讲解基于WCF实现的聊天室,它可以群聊,可以单聊,可以发送表情,支持智能的用户上线,下线提示功能.下面让我们先来看看具体的实现方式.设计方式首先,我们知道聊天室一般就是许多人聚在一起聊天,所以用户上线,用户下线功能必须有, 这样能够很方便的通知用户每个人的登录状态;当然,更为重要的是,聊天室中的人需要能够进行交流,所以,这里我设计了群聊和单聊的两种交流方式.对于上线,我们的设想就是: 用户登录,然后向所有登录的用户发送一条信息,意即某某某登录了系统,然后系统中所有的用户会回馈这条信息,
阅读全文
寄宿于CS程序的WCF服务
摘要:寄宿于CS程序的WCF服务最近项目中,需要对外部程序提供服务接口,用来进行数据交互和部分设备控制。由于都是使用的.NET平台开发的,因此想到使用WCF服务。之前也用过WCF服务,但是当初使用的时候是通过IIS寄宿的,有些地方不太让人满意,一则是同一个软件要部署两个地方,CS的桌面程序和寄宿于IIS的WCF服务部分,二则是由于系统本身问题,使用的是SQLite数据库,无法实现多线程访问,造成了数据重复,容易造成数据不一致。所以现在准备把WCF服务寄宿于CS程序中,这样就解决了以上两个问题。由于对WCF一知半解,只知道按部就班的使用,从明白过其中的道理,所以在网上找了些教程[1],实现了自己的想法
阅读全文
捕获WCF服务端与客户端产生的通讯数据并分析
摘要:捕获WCF服务端与客户端产生的通讯数据并分析现在很多都在采用WCF做为服务端,在我们的.NET快速开发整合框架(RDIFramework.NET)中也不例外,在采用这种方式时,我们经常需要知道我们的客户端,在访问WCF服务端时,WCF服务端究竟做了那些工作,也就是运行WCF服务端与客户端后,我们想查看WCF服务端与客户端产生通讯数据。如何才能查看产生的通讯数据呢?这就是微软提供的Windows Communication Foundation (WCF) 服务跟踪查看器,它可帮助分析 WCF 侦听器所生成的活动跟踪 (*.svclog) 诊断跟踪为合并、查看和筛选跟踪消息提供了一种简单方法,可
阅读全文
WCF部署纠错
摘要:WCF部署纠错说明这是“又”是一篇需要长期跟进的帖子。将WCF初次部署到IIS上总是会出现很多让人抓狂的错误。虽然已经吃了很多这样的亏,而且每次都很“深刻”。但是鲜有“完整和丰富”的解决方案。这大抵是因为,这属于环境配置,一旦环境配置完成,就不会再出现——直到碰到一个新的环境。所以,这类的经验积累起来不是很快速,环境又不易重现。零散的Tip又极难成文...总的来说,因为种种原因,WCF的部署就是这么头痛。所以,我觉得为自己写一个跟进贴,慢慢维护。解决方案来自网上各网友的博客,但是由于时间的推移,这里无法一一引用。特此说明。错误提示以及解决方式添加功能添加功能是指在windows上安装功能:Wi
阅读全文
WCF的几种寄宿方式
摘要:WCF寄宿方式是一种非常灵活的操作,可以在IIS服务、Windows服务、Winform程序、控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便、高效提供服务调用。本文分别对这几种方式进行详细介绍并开发例子进行说明,以求大家对WCF寄宿的方式进行全面的认识和了解。1、 WCF服务的IIS服务寄宿我在我前面几篇WCF开发框架的介绍文章中,介绍过了WCF常用的一种寄宿方式,IIS服务寄宿。这种寄宿方式是最为方便的方式,而且由于服务只需要IIS运行就能自动运行起来,因此广为使用。创建这种方式IIS寄宿方式的,只需要在解决方案里面,添加WCF服务应用程序,就可以生成这种的服务模块了。这个是一
阅读全文
使用Task简化Silverlight调用Wcf(续)
摘要:上一篇使用Task简化Silverlight调用Wcf介绍了Silverlight下使用Task的一些方法,这篇继续改进一下。改进生成工具的生成的方法上次生成的代码如下,这些TaskAsync只是简单的包装一下Wcf的begin和end方法:?12345678publicTask DoWorkTaskAsync(){returnTask.Factory.FromAsync(this.Channel.BeginDoWork, this.Channel.EndDoWork, null);}publicTask<DateTime> GetSerivceTimeTaskAsync(){re
阅读全文
WCF实际应用之IParameterInspector扩展
摘要:最近开发一套由客户方定制的服务,据说之前版本是通过C写的WebService。那个神奇的Service我是没见过。只是有一点,之前的验证过程居然是这样进行的:客户端发送账号、密码,Service进行验证。验证成功后,Service会将产生一个加密字符,以类似Session方式存储并发送一个加密字符串给客户端。之后客户端每次调用服务都发送这个加密字符串以供服务端进行验证合法性。虽然个人觉得极为变态,但是交涉未果。另外还有一点需求就是:服务端会有一个授权文件,这个授权文件里面存放的是对客户端接口调用的授权信息。 基于以上原因,考虑到WCF优秀的扩展性决定对他进行一定的扩展,以完成以上需求。 ...
阅读全文
WCF学习笔记(一) 之 开门见山
摘要:WCF由 .NET Framework 3.0 (大概在07年前后)开始引入,时隔五年多,才开始学习,再看到一些大牛在几年前已经 对WCF有比较深入了解,并写了不少博客,顿感学习之迟钝、技术之落伍——这其中有些人可能是对新技术的狂热和兴趣,接触和了解的 比较早,有些人只会等需要用到此新技术时才会去学习,像我。转入正题,正如这篇博客的标题一样,我将会以此篇博客为开端,不断跟大家分享我学习WCF的"所得"——即我眼中的WCF,需要强调的是:我肯定不是权威,我只想把我所知道的用比较通俗的语言写出来,让复杂的东西变的简单易懂点儿,期望每篇博客至少会让你有一点儿"收获&qu
阅读全文