biztalk中使用.net class类型的消息(一) 相关知识介绍【转】

摘要:
但是这并不表示biztalk只能处理xml消息,事实上,biztalk可以处理消息类型可以是平面文件、xml类型、可序列化的.netclass或者其他任意的二进制数据流。注意任何消息在biztalk的表现都是一个多部分的消息,不过一般的消息只有一个正文部分。定义.netclass的类名就相当于xml类型的根元素。但对于biztalk应用中使用的.netclass一般就是使用了类的公共属性和字段。Biztalk内建.netclass消息序列化使用的是xml序列化方式。

.概述

.消息的结构

.消息的类型

1.平面文件

2.Xml文档

3..net class

4.二进制数据

..net class类型的序列化

..net class类型的消息

1.类要设置为可序列化

2.类中只包含公共属性和字段

3.设置名称空间

4.设置可分辨字段和升级属性

4.1.设置可分辨字段

4.2.设置升级属性

5.一个.net class消息类型的完整代码

.Biztalk如何处理.net class类型的消息

.Orchestration中从零开始新建一个xml类型的消息

1.在消息构造形状中构造新xml消息

2.在消息构造形状中构造新.net class类型消息

3.从零开始构造新xml类型消息

3.1.设置xml文件属性

3.2.写一个从嵌入资源中读取xml文件内容的方法

3.3.在消息赋值形状中调用读取xml文件的方法

一.概述

一般来讲,biztalk项目中使用的消息都是基于xsdxml消息,因为这是biztalk最擅长处理的消息。Biztalk整个体系架构都是建构在xml基础之上,在biztalk内部用xml来处理消息,在message box的存储形式也是xml

但是这并不表示biztalk只能处理xml消息,事实上,biztalk可以处理消息类型可以是平面文件、xml类型、可序列化的.net class或者其他任意的二进制数据流。

这里要讨论的是在biztalk中,尤其是在orchestration中如何使用.net class类型消息。

二.消息的结构

BizTalk中每条消息都可视为多部分消息,此消息可以由零个或多个部分组成。具有一个或多个部分的消息都具有一个标识为正文部分的部分(但是只能有个一部分标识为正文)。每个部分均由可表示XML 文档、平面文件、序列化的.NET 类或其他二进制数据流的二进制数据块组成。

一般的开发biztalk项目体验中,大多是新建一个消息,然后给这个消息指定一个xsd作为这个消息的类型。感觉上一个消息就只能指定一个xsd类型(也可以指定为一个序列化的.net class类型),跟一个xsd相关。其实这样通过这样方式建立的消息也是多部分消息,只是这个消息只有一个正文部分而已。

如果要建立真正有多个部分的消息类型,可以在orchestration view面板中的Types窗格中,展开Types,在Multi-part Message Types下新建一个多部分消息类型,在新建的多部分消息类型中可以建立多个部分,每个部分分别指定类型,还要指定其中的一个部分为正文部分。以后新建消息把消息类型指定为这个多部分消息类型,这个新建消息就是一个具有多个部分的消息了。

biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第1张注意

任何消息在biztalk的表现都是一个多部分的消息,不过一般的消息只有一个正文部分。

三.消息的类型

从上面的叙述可以得知,每个消息其实都是多部分消息,一般来讲每个消息至少有一个部分,也可能有多个部分,不管是只有一个部分还是有多个部分,其中必须有一个部分被指定为正文部分,整个消息的类型就由正文部分的消息类型决定。如果正文部分分别为以下情况时,如何确定消息的类型:

1.平面文件

平面文件进入到biztalk都会在接收管道中都会被平面文件拆装器拆解为xml的格式,有一个经过平面文件扩展后的xsd架构跟其对应,所以平面文件可以被认为也是xml的消息类型。参看下面的xml文档部分。

2.Xml文档

Xml消息的消息类型由xml消息的命名空间(后接# 符号)和xml消息根节点的名称组成。比如,一个xml消息的根结点的名称空间是http://tempuri.org/samples/MessageTypexml消息的根结点的名称是Message,那么这个消息的类型就是:http://tempuri.org/samples/MessageType#Message

3..net class

.net class类型的消息同样是由名称空间加上根元素名称组成。

.net class类型的消息的名称空间由class类的System.Xml.Serialization.XmlRootAttribute属性指定,在定义.net class类时可以在类名前加上相关attribute来指定这个类的一些类级别的attribute(请参考第五部分“.net class类型消息中的详细定义一个.net class的完整代码),System.Xml.Serialization.XmlRootAttribute中用Namespace参数指定此类的名称空间。

定义.net class的类名就相当于xml类型的根元素。

名称空间#类名就是.net class消息的消息类型,跟一般xml消息一样,.net class消息类型也可以作为订阅消息的条件。

4.二进制数据

二进制数据流的消息类型需要由定制的接收管道把消息类型升级到消息的上下文,一般的二进制数据流的消息类型使用全限定的类型名。

这种情况这里不加讨论,如有必要,以后用专文来探讨二进制数据流消息的情况。

四..net class类型的序列化

Biztalk中的消息必须是可以序列化的,原因很简单,biztalk中消息不管是从外部进来,还是由orchestration产生的消息,统统都要被保存在Message Box数据库中,要能被保存在数据库中持久保存,消息就必须能被序列化。

还有一点,在长时间运行的orchestration中,运行的周期可能是一天、几天、十几天,甚至可能几个月。在这么长的时间中,一个orchestration实例由始至终都运行在内存中是及其不明智的做法,将耗费大量的资源。所以biztalk设计了一个dehydrat(分解)和rehydrat(重组)的机制,在orchestration实例空闲的时候,把orchestration实例和相关的状态和消息序列化保存到数据库,一旦有消息激活这个orchestration实例时,再把这个orchestration实例和相关状态消息反序列化到内存继续运行。

.net class序列化Dotnet框架支持两种序列化方式,可以把类序列化为xml格式,也可以把类序列化为二进制格式。

二进制序列化是把对象转换成一串二进制的数据流,二进制序列化保持类型保真度,可以最真实的保存一个对象的全部状态。

Xml序列化是把对象转换成一个xml文档,XML 序列化仅序列化公共属性和字段,且不保持类型保真度。但对于biztalk应用中使用的.net class一般就是使用了类的公共属性和字段。

Biztalk内建直接支持.net class序列化,就是说在biztalk中使用.net class的消息不用开发者自己考虑.net class消息如何如何序列化和反序列化。Biztalk内建.net class消息序列化使用的是xml序列化方式。

二进制序列化方式不是biztalk内建支持的序列化方式,可以选择对.net class消息进行二进制的序列化,但是这需要开发者做更多的工作,需要写代码对消息进行二进制的序列化和反序列化,并定制自己的拆装器和组装器对消息进行序列化和反序列化的工作。

本文只讨论xml序列化的方式,对于二进制序列化的方式,如有必要以后再用专文讨论。

五..net class类型的消息

Biztalk中使用.net class需要考虑作为消息的特点,跟一般的类有些不同,一般要注意以下几点:

1.类要设置为可序列化

在定义类前加上表示可以序列化的attribute[Serializable()]

2.类中只包含公共属性和字段

一般类中的公共属性和字段会被转换为xml文档中的元素,私有属性没什么意义,方法对转成xml也没什么意义。

3.设置名称空间

名称空间是构成消息类型的一部分,.net class转成xml也可以带有名称空间,看下面的代码,名称空间由定义类前的“[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myURL")]”设置,表示这个类转成xmlTarget Namespace"http://myURL"

另外类的名称就相当于xml的根元素名称,跟上面的名称空间一起组合成消息的类型。

如果没有设置名称空间,则此.net class消息的类型就是类名称。

4.设置可分辨字段和升级属性

.net class类型中同样可以设置可分辨字段和升级字段。

4.1.设置可分辨字段

设置可分辨字段很简单,在需要设置的公共属性或字段前加上“[DistinguishedField]” attribute即可,表示这个公共属性或字段已被设置为可分辨字段。

4.2.设置升级属性

设置升级属性同xsd中设置升级属性类似,首先也先有一个属性架构,然后在需要升级为属性的公共属性或字段前用“Property”attribute指定关联到哪个属性。如下面的代码中的:

[Property(typeof(netClassMessage_PromoteXSD.PropertyName))]

public string PropertyName

这表示要把公共属性PropertyName升级,并关联到属性架构netClassMessage_PromoteXSD中的PropertyName属性。

5.一个.net class消息类型的完整代码

1{
6biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张//表示此类是可以序列化的7biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[Serializable()]
8biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张//此属性设置目标名称空间TargetNamespace9biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[System.Xml.Serialization.XmlRootAttribute(Namespace="http://myURL")]
10biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张//类名称相当于XSD中的根元素,上面设定的名称空间加上类名称就组成了消息类型11biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicclassnetClass
12biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
13biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张privatestring_ID;
14biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张privatestring_name;
15biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张privatestring_address;
16biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张privatestring_propertyName;
17biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicnetClass()
18biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
19biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张_ID=System.Guid.NewGuid().ToString();
20biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
21biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张//DistinguishedField属性表示这个字段是可分辨字段22biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[DistinguishedField]
23biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicstringID
24biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
25biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张get26biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
27biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张return_ID;
28biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
29biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张set30biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
31biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张_ID=value;
32biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
33biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
34biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[DistinguishedField]
35biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicstringName
36biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
37biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张get38biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
39biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张return_name;
40biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
41biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张set42biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
43biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张_name=value;
44biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
45biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
46biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[DistinguishedField]
47biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicstringAddress
48biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
49biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张get50biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
51biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张return_address;
52biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
53biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张set54biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
55biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张_address=value;
56biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
57biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
58biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[DistinguishedField]
59biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张//netClassMessage_PromoteXSD.PropertyName是在属性schema中定义的属性,此Property属性
60biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张//指示这个字段为promote字段,对应netClassMessage_PromoteXSD.PropertyName61biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张[Property(typeof(netClassMessage_PromoteXSD.PropertyName))]
62biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicstringPropertyName
63biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
64biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张get65biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
66biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张return_propertyName;
67biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
68biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张set69biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
70biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张_propertyName=value;
71biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
72biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
73biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
74biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第84张}
六.Biztalk如何处理.net class类型的消息

.net class类型的消息从外部进入biztalk.net class类型消息在进入到biztalk时的存在形式必定是被序列化后的xml形式(这里只讨论xml序列化的情况)。

所以,对入站的.net class类型消息需要使用xml拆装器,.net class类型消息序列化后同样有名称空间和根元素,并且也跟一般的xml消息类型一样,名称空间和根元素也决定了这个.net class消息的消息类型。

同样,.net class消息根一般xml消息一样根据消息类型被路由到订阅此消息的orchestration

.net class消息在orchestration中的存在形式还是xml形式,只有在消息构造形状中对.net class消息进行构造或赋值的时候,biztalk引擎会对消息做相关的序列化和反序列化的工作,以便对.net class消息进行相关的处理。在消息构造形状以外,.net class消息的存在形式就是xml

七.Orchestration中从零开始新建一个xml类型的消息

orchestration,一个消息一旦被构造完成,这个消息就不再被允许有任何改动,就是不能被修改了。如果要修改这个消息,必须重新在消息构造形状中构造一个新消息,然后修改新的消息,新消息一旦出了构造形状就算构造完成。

构造xml消息和构造.net class类型消息有所不同,下面分别列出

1.在消息构造形状中构造新xml消息

l通过map映射,map映射把源架构的消息映射到目标架构的消息,在转换的同时把消息值赋给了新的目标架构的消息,构造了一个新的消息。

l通过消息赋值语句,赋值语句把同类型的消息赋给一个新的消息,构造了新消息。

l通过把XmlDocument赋值给消息,xml消息的本质就是一个xml,所以可以把一个XmlDocument类型的变量直接赋给xml消息,当然,这个XmlDocument要是跟这个消息兼容的,XmlDocument要符合这个xml消息的架构。

2.在消息构造形状中构造新.net class类型消息

只能通过new操作符构造新.net class类型消息,.net class类型消息首先它是一个.net的类,可以通过new操作符来新建一个此类的对象。

3.从零开始构造新xml类型消息

如果一个.net class类型消息从外部进入到orchestration,在orchestration中对这个.net class类型消息进行处理转换,无外乎会有两种情况:一种是把这个消息赋值给同类的或者另一个.net class的消息,然后对新消息进行处理。更多的情况是,要把这个.net class消息转换成一个xml的消息,然后处理这个xml消息。

对于第一种情况简单,只要用new操作符新建一个.net class类型的消息,然后进行赋值或者修改新消息的属性等等即可进行相关处理。

但是对于第二种情况就比较麻烦,用map吧,map只支持从xml消息到xml消息的转换,不支持.net class消息的转换。用赋值语句吧,xml类型和.net class类型不是同类型,不能直接赋值。如果xml消息类型可以用new操作符新建一个新消息多好,可是,目前还不行,不能跟一般的.net类一样通过new操作符来新建一个对象。

但是这里又必须要先新建一个xml类型的消息,有了这个xml消息,才能把.net class类型的消息的相关属性转移到这个xml类型的消息。

从零新建一个xml类型消息(from scratch)在biztalk中是个比较麻烦的事,上面提到的通过把XmlDocument赋值给xml消息好像是目前的唯一方法。

这种情况大致需要做以下的事情:

orchestration中新建一个XmlDocument类型的变量,比如变量名为xmlDocVar,要构造的xml消息为xmlMsg,然后在消息赋值形状表达式中

xmlDocVar.LoadXml(“xml字符串”);

xmlMsg = xmlDocVar;

其中的“xml字符串是一个跟xmlMsg消息的架构相容的一个xml样例的文本。赋值以后,就可以对xmlMsg进行各种操作了,把可分辨字段或升级属性修改为需要的值。

xml样例文本直接放在硬代码里面不太方便,也不灵活,比较好的做法是把xml文本放在一个xml文件中,从文件中读取xml文本。

上面的例子可以变成这样:

xmlDocVar.LoadXml(“xml文件名”);

xmlMsg = xmlDocVar;

其中的“xml文件名xml样例文件的完整路径,这样如果要修改xml样例文本直接修改这个文件就行了,不用去改硬代码。

但是这样会给部署带来问题,项目部署以后这个xml文件往哪放,biztalk项目其他的资源都是dll,被部署到GAC中,就这么个xml文件孤零零的要找个地方放,虽说也没什么问题,但总觉得不很舒服,至少这个办法不够优雅。

其实还有一个更舒服的办法,就是把这个xml文件作为一个嵌入资源,把它嵌入到项目生成的dll中,一起被部署到GAC中,读取的时候也到这个dll中读取。这需要做些额外的编码工作,步骤如下:

3.1.设置xml文件属性

在解决方案资源管理其中,选中这个xml文件,查看它的属性,把生成操作这一项,改成嵌入的资源,这样这个xml文件就会被嵌入到编后的dll文件中。

3.2.写一个从嵌入资源中读取xml文件内容的方法

在跟这个xml文件同一个项目中,新建一个类,这个类只有一个静态方法,这个方法根据提供的xml文件名,在assembly中找到嵌入的xml文件,返回这个xml文件对应的XmlDocument的对象。

这个方法的完整代码如下:

1{
9biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicclassEmbeddedResourseProcessor
10biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
11biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张publicstaticXmlDocumentGetXmlDocResource(stringfileName)
12biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第8张biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第9张{
13biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张XmlDocumentdoc=null;
14biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张Typetype=MethodBase.GetCurrentMethod().DeclaringType;
15biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张Assembly_assembly=Assembly.GetExecutingAssembly();
16biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张string_namespace=type.Namespace;
17biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张
18biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张stringresourceName=_namespace+"."+fileName;
19biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张
20biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张Streamstream=_assembly.GetManifestResourceStream(resourceName);
21biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张doc=newXmlDocument();
22biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张doc.Load(stream);
23biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第2张returndoc;
24biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
25biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第18张}
26biztalk中使用.net class类型的消息(一) 相关知识介绍【转】第84张}

3.3.在消息赋值形状中调用读取xml文件的方法

orchestration的消息赋值形状中,用类似下面的语句给新xml消息赋值:

XmlMsg = netClassMessage_netClass.EmbeddedResourseProcessor.GetXmlDocResource("xml文件名");

参考资料:

lUsing .NET Classes for Orchestration Message Types

lBizTalk messages based on .NET types instead of Xsd schemas

lConstructing BizTalk 2004 XML Messages (In an Orchestration)

lMessages from Scratch with Embedded Resources

lUsing a Custom .NET Type for a Message in Orchestrations

免责声明:文章转载自《biztalk中使用.net class类型的消息(一) 相关知识介绍【转】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery参考手册corefx 源码学习:NetworkStream.ReadAsync 是如何从 Socket 异步读取数据的下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

推荐:Java性能优化系列集锦

Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了。现代JVM持续演进,内建了更为成熟的优化技术、运行时技术和垃圾收集器。与此同时,底层的硬件平台和操作系统也在演化。 目录: 一、Java性能优化系列之一--设计优化 二、J...

Jar包版本查看方法

原文:https://blog.csdn.net/u011287511/article/details/66973559 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内 容,先来看s...

HBase实践案例:车联网监控系统

项目背景 本项目为车联网监控系统,系统由车载硬件设备、云服务端构成。车载硬件设备会定时采集车辆的各种状态信息,并通过移动网络上传到服务器端。服务器端接收到硬件设备发送的数据首先需要将数据进行解析,校验,随后会将该消息转发到国家汽车监测平台和地方汽车监测平台,最后将解析后的明文数据和原始报文数据存储到系统中。车辆的数据和其他数据需要通过web页面或rest...

DataSnap基础

DataSnap基础 1. DATASNAP 历史 作为MIDAS起始于Delphi3,Delphi4是MIDAS II,Delphi5中是MIDASIII,而后基于COM远程数据模块方式使用TCP/IP,HTTP,(D)COM构建出强大的通讯能力.从Delphi6开始改名为DataSnap,直到D2007这个框架一直在使用.D2009重新架构了DataS...

Kafka创建SSL证书

对于消息组件,如果按照最初的设计来讲,性能最高得就是RabbitMQ,因为RabbitMQ设计比较完整,而Kafka不同,Kafka最初的设计最大的坑:没有安全认证,所以最初的一些系统设计的时候为了考虑到安全性,所以采用了性能较差的ssl认证方式来进行出来,也就是说使用证书的方式来处理认证操作。 如果要想进行证书的ssl处理,那么肯定需要通过java中的...

asp.net web api 测试帮助页面建立并测试

asp.net web api 测试帮助页面建立并测试 现在使用WEB API来开发,越来越流行。 在开发过程中的测试调试,可以使用Fiddler等工具来帮助测试外,还有: 在asp.net 中有种方式可以建立一个帮助测试页面来帮助测试调试API接口,非常的方便。 英文原文地址: http://blogs.msdn.com/b/yaohuang1/arch...