摘要:
private static int SequenceSearch(int[] a, int key) { for (int i = 0; i < a.Length; i++) { if (a[i] == key) { return i; } } return -1; }太简单,不解释,留个纪念!别以为这就可以了,上面的还能优化,不可能吧... 阅读全文
摘要:
调用场景• 经典的客户端/服务器(C/S)应用程序–客户端使用远程,有状态的对象并且在其生命周期内进行控制• 分布式,可扩展的应用程序– 通过及时释放远程对象来节约资源的使用• 分布式单件 (比如:计数器,账单的流水号等)–多个客户端共享状态• 经典的无状态Web服务调用实例模型• 控制服务实例的生命周... 阅读全文
摘要:
Request/Reply操作• 所有服务操作的缺省行为• WSDL描述操作所涉及到的<input>与<output>消息• 消息能够包含请求参数,返回数据,<body>元素,或者返回的SOAP错误Client---request-->ServiceClient<--Reply--ServiceOne-Way操作(... 阅读全文
摘要:
WCF想要对外提供服务,那么需要一个宿主来容纳这些服务。宿主环境• Self-hosting– 控制台应用程序,Windows应用程序,Windows服务– HTTP, TCP, named pipes, Microsoft® Message Queuing (MSMQ)• IIS/Microsoft® ASP.NET–... 阅读全文
摘要:
这部分的前期理论知识比较多,所以我们先从Demo入手,然后再来看理论东西。我们这部分只关注WCF关于邦定的技术,对于其他涉及到的技术不做探讨,由于Binding这部分东西要和其他很多相关技术共同使用,而且涉及到很多WCF中的高级操作,在其他的文章中会逐步提到,这里我们只关心邦定就可以了。Demo1:二进制邦定通过httpIHelloIndigoService 代码 Code highlightin... 阅读全文
摘要:
对于WCF中的异常与错误处理我们必须先了解一个概念SOAP Faults,它实际上就是在服务端和客户端之间来传递错误信息的一种载体。• 公共语言运行时(CLR)异常无法跨越服务边界– 未捕捉异常最多到达服务通道(service channel)– 在报告给客户端之前必须要进行序列化• 所有的异常都被序列化为SOAP faults– 基于标... 阅读全文
摘要:
通常来说有两种控制方式:• 严格的版本控制:– 对于服务或者数据契约的任何修改都需要形成独立的新版本(formal versioning)• 实用的版本控制:– 对于向后和向前同时兼容的版本相容性– 服务与数据契约– 保存未知元素(如果可行的话)– 容忍缺失的元素– 只有当签名发生显著变化并无法和老的版... 阅读全文
摘要:
由于数据契约成员的移除导致在发送-回传(Round Trip)过程中数据的丢失问题。如图5-9所示,客户端基于数据契约CustomerV1进行服务调用,而服务的实现却是基于CustomerV2的。那么序列化的CustomerV1对象生成的XML通过消息传到服务端,服务端会按照CustomerV2进行反序列化,毫无疑问Address的数据会被丢弃。如果Customer的信息需要返回到客户端,服务需要... 阅读全文
摘要:
因为我们会一直更新WCF服务或者扩展新的WCF服务,那么就不得不面对一个问题--WCF的版本控制问题。• 一旦发布,WSDL契约就被确定– 必须支持向后兼容• 在理论上,策略可以发生变更– 新的安全策略– 附加的可靠性特性– 策略使用元数据交换来发现• 如果客户端能够动态地处理变化,那么仅仅改变策略是安全的版本相容... 阅读全文
摘要:
对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息。比如:在一些情况下,具有这样的要求:当序列化一个对象并生成消息的时候,希望将部分数据成员作为SOAP的报头,部分作为消息的主体。比如说,我们有一个服务操作采用流的方式进行文件的上载,除了以流的方式传输以二进制表示的文件内容外,还需要... 阅读全文
摘要:
这部分东西需要XML相关知识和序列化和反序列化的知识,下面我们根据一个Demo来理解一下自定义序列化的过程。这个例子的程序结构和之前的都是一样的,唯一不同的我们这里没有使用DataContract,而是采用自己来编写序列化器的方法,为什么要自定义哪?在完美的WCF世界中:– 创建同业务对象描述相同功能的数据契约– 暴露在服务契约中在现实世界中:– 可能无法拥有对象(不可序列化)– 业务对象的实例化可能不正确– 可能需要对现存的schema进行支持如何自定义序列化气?他是怎样实现的那?• IXmlSerializable 类型为WSDL和元数据交换(MEX)提供了XSD schema– 支持Co 阅读全文
摘要:
已知类型(Known types)允许在服务契约中使用多态的行为在服务操作中暴露基本类型将已知类型(known types)相关到基本类型(基类类型)自身;特定操作;整个服务契约采用属性声明或者配置的方式来实现[KnownType]: 相关到基本类型(基类类型)自身代码 Code highlighting produced by Actipro CodeHighlighter (freeware)... 阅读全文
摘要:
契约服务说白了就是对WCF服务的对外接口作定义和声明。下面是一些关键字,只有加了关键字的方法才能被服务调用者访问。[ServiceContract]:定义服务操作,对于某个Interface加上这个属性标签就会就定义了一个服务,客户端才可以看到这个服务。这个属性标签可以应用于接口或者类,建议应用于接口,第一,可以消除服务实现的耦合性,因为接口中不存在任何的业务逻辑相关的东西,第二,服务可能会实现多于一个契约,也就是说一个类同时实现多个服务,如果把标签定义在类上,就无法同时实现多个服务了。两个属性:Name:指定暴露给客户端的服务名称。Namespace:提供有意义的命名空间。[Operatio 阅读全文
摘要:
前面几篇讲的都只能传递string类型的简单参数,如果要传递一个带有多个属性的Class类型的对象要怎么办那???数据契约就是用来解决这个问题的!WCF推荐使用数据契约的方式实现数据的序列化。这部分的内容很好理解但是很重要,先看[DataContract]和[DataMember]这两个就是数据契约的标记,他们在System.Runtime.Serialization命名空间下。[DataContract]:它用来实现Schema与CLR类型之间的转换。总是要提供命名空间,Web Service的规范要求使用“Schemas”前缀来表示服务目标的命名空间。[DataMember]:明确成员是否 阅读全文
摘要:
必要的开发工具,目前使用的是:Visual Studio Team System 2008Microsoft Silverlight Tools 3 for Visual Studio 2008 Microsoft Expression Blend 3下面说明一些安装方式,首先安装VS2008,然后打VS2008 SP1的补丁,然后再安装Sliverlight Tools。这些东西都可以在网上找到... 阅读全文
摘要:
Intranet应用程序WCF支持经典的C/S部署方式多种Windows认证方式(NTLM或Kerberos)NTLM: 在网络环境中,NTLM 用作身份验证协议以处理两台计算机(其中至少有一台计算机运行 Windows NT 4.0 或更早版本)之间的事务。具有此配置的网络称为“混合模式”,这是 Windows Server 2003 家族中的默认设置,另外,NTLM 是... 阅读全文
摘要:
在WCF开发概述中讲解了手工方式的WCF应用,其实实际开发中使用更多的使用配置方式和元数据来实现WCF,下面我们来看一个具体的Demo,这个例子和WCF开发概述中使用的是同一个例子,只是实现方式不同,然后来再来讲解。Demo首先在Host项目中添加一个App.config文件,可以参照下图方式:添加后工程如下:App.config代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xmlversion="1.0" 阅读全文
摘要:
WCF全称是Windows Communication Foundation,它是.NET3.0的重要组成部分,用来解决Windows下的一些通信方面的问题。WCF是Microsoft平台上的SOA架构,SOA即面向服务的架构(Service Oriented Architecture)。它的好处是提供了统一的编程模型,在这之前为了解决不同的需求可能要使用不同的技术比如:Web service\.... 阅读全文
摘要:
Silverlight这个技术已经出来很长时间了,目前比较稳定的是3.0版本,4.0的BETA也发布了,相信微软今后还会不断完善和推出新的特性,Silverlight这个技术我看来是非常的酷,以前是不敢想象的,而且对于今后的市场前景我是非常看好的。这篇文章主要介绍一下Silverlight工具之Expression篇的概述,对这些工具有个整体的概念和把握,今后还会对他们的使用和制作技巧做详细的描述... 阅读全文
摘要:
直接选择排序,算法时间复杂度也是N^2, 其思想和冒泡有点相似,但是区别在于冒泡找到就交换,直接选择排序先找到位置最后在交换。[代码] 阅读全文
摘要:
冒泡排序,简单好理解代码也比较容易实现。思想是这样的,k1,k2,k3,...ki....kn 算法是搜索队列中的最小值然后通过交换把整个数组中的最小的元素放到第一个位置,然后从第二个位置反复这个过程,以此类推。算法的时间复杂度为N^2.[C#][代码] 阅读全文
摘要:
前面写了个直接插入排序的算法,后来看了看书还有一个二分法直接插入排序,看了看算法思想,拿起纸笔开始行动。一个字晕,思路很清楚,但是上机运行就是不对。搞了老半天终于出来,代码如下。这个算法的思想是这样的,一部分和直接插入排序是一样的,(k1,k2,k3..ki-1)ki...kn 也是把ki插到k1~ki-1的已排好序的队列里,不同的是直接插入排序是一个一个的向前比较来确定插入位址并且完成元素的向后... 阅读全文
摘要:
简单?谁说的,哥们儿好久不搞这东西,突然上手,我这个晕呀!想了老半天才回忆起直接插入排序的算法思想。有了思想去写程序,发现真的生疏了花了半个多小时才写出来,代码在下面了。说实话,直接插入排序不常用到,其时间复杂度为O(n^2),思想是:(k1,k2,k3,ki-1)Ki...Kn,把Ki插入到前面(k1~ki-1)这个已排好序的队列里,Ki的插入方法为:把Ki与Ki-1项比较,如Ki<Ki-... 阅读全文