公共对象请求代理体系结构

应用程序体系规范

CORBA(Common ObjectRequest Broker Architecture公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程序体系规范。或者说CORBA体系结构是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;OMG组织是一个国际性的非盈利组织,其职责是为应用开发提供一个公共框架,制订工业指南和对象管理规范,加快对象技术的发展。

技术介绍
­­­CORBA是OMG组织在1991年提出的公用对象请求代理程序结构的技术规范。CORBA有很广泛的应用,它易于集成各厂商的不同计算机,从大型机一直到微型内嵌式系统的终端桌面,是针对大中型企业应用的优秀的中间件。最重要的是,它使服务器真正能够实现高速度、高稳定性处理大量用户的访问。现在很多大型网站后端的服务器都运行CORBA,其中有些网站您可能每天都在访问。
CORBA的底层结构是基于面向对象模型的,由OMG接口描述语言(OMG Interface Definition Language,OMG IDL)、对象请求代理(Object Request Broker,ORB)和IIOP标准协议(Internet Inter­ ORB Protocol,也称网络ORB交换协议)3个关键模块组成。
使用接口描述语言编写的对象接口,使得与语言无关的独立性成为可能。IDL使得所有CORBA对象以一种方式被描述,仅仅需要一个由本地语言(C/C++、CORBA或Java)到IDL的“桥梁”。CORBA对象的互通信要以对象请求代理为中介,这种互通信可以在多种流行通信协议(如TCP/IP或IPX/SPX)之上实现。在TCP/IP上,来自于不同开发商的ORB用IIOP标准协议进行通讯。­­­­
我们知道,为了保持CORBA的商业中立性和语言中立性,必须有一个中介,存在于像C++CORBA服务器代码和JavaCORBA客户机这样的实体中间,这就是IDL。一个底层对象的若干相关方法和属性被IDL集入一个单一接口。一旦IDL接口定义完成,它可以以Stub码或框架代码的形式编译成所选用的语言。在所有的ORB中都有IDL编译器。
值得注意的一点是,IDL不同于其他的面向对象程序设计语言,我们不能用它指定所定义的类或方法的具体实现。因此,仅仅将它作为一种定义底层对象接口的语言要好得多。
基本构件
CORBA结构示意图如图1所示。
公共设施
公共设施分为两类:
对象服务
对象服务是为公共设施和各种应用对象提供的基本服务,如命名服务、事件服务、事务处理服务、通知服务、交易服务、生命周期服务和安全服务等等。
应用对象
这是未经OMG标准化的、由各个应用开发者自行开发的实体,应用对象使用CORBA提供的各种对象服务。
对象请求代理
对象请求代理(ORB: Object Request Broker),它是CORBA的基础,是在分布环境下,CORBA应用所使用的、基于对象模型的软件总线。它的基本职责是解决对象引用的请求和建立应用对象之间的联结,通过标准接口,使这种联结独立于所使用的硬件和软件的平台,从而保证了对平台的透明性以及对操作系统、网络协议和编程语言的透明性。
接口定义语言
接口定义语言(Interface Definition Language,IDL)用来定义CORBA对象使用的、应用组件之间的接口。它不是过程语言,它只能定义接口,而不是去实现某个接口。IDL独立于任何编程语言,用IDL编译器可以将它映射为其他常用的语言,如C++,C,COBOL,Java等等。
IDL的框架主要包括四种元素:
核心作用
对象的定位
当客户端程序得到对象引用(Object Reference)之后,会调用该对象引用的操作。这时,客户端的ORB会根据对象引用中的信息来定位对象的实现(具体定位的方法将在后面章节讨论),并确保该对象实现可以接受请求。由于ORB可以根据对象引用来定位服务器,因此客户端程序不必关心对象是在哪里实现的。客户端对远端对象发起调用,就好像调用本地对象一样,从而实现了CORBA的位置透明的特性。
编组与解组
在客户端发起调用的时候,输入参数格式都与特定平台和特定语言有关,客户端ORB负责将它们编码成可以在网络上传送的格式,或称在线格式(on-wire format),这一过程称为编组(marshalling)。这种“0101”的格式在网络上传送后到达服务器端的ORB,服务器端的ORB负责将这些在线格式“还原”成本地所使用的特定平台和语言的格式,这一过程称为解组(unmarshalling)。与此相反,当服务器端调用结束以后,服务器端ORB负责将输出参数和返回参数编码成在线格式,并经网络传送到客户端ORB,客户端ORB再将这些在线格式“还原”成本地所使用的特定平台和语言的格式,作为输出参数和返回参数送给客户端程序。总的来说,编组与解组的重要性表现在:第一,它把对远端对象的调用变成一维的有序码流,有利于在网络上的传送。第二,它提供了一个独立于各平台和语言的“中间格式”,不同的平台上的不同语言通过这个“中间格式”进行“对话”“(中间格式”的规则,将在后面章节中叙述)。正是由于编组和解组的引入,使客户端和服务器端的平台和语言可以不同,带来了CORBA的平台独立与语言独立的特性。
初始服务
在程序初启的时候,需要得到一些通用的对象引用,如对象适配器、命名服务、接口库的对象引用。由于处于程序初启的特殊阶段,这些对象引用很难用常规的方法得到。ORB可以通过伪对象接口CORBA∷ORB提供两个操作以完成这项功能:list-initial-services()和resolve-initial-references()(详见“ORB初始化”一节)。
屏蔽协议
ORB负责处理底层网络通信的细节,它可以使用不同的底层网络协议,例如TCP/IP,IPX,SS7等,从而将客户与服务器从复杂的网络编程中解脱出来。
提供接口库
每个ORB都有一个接口库,接口库负责存储用接口定义语言(IDL)定义的接口的信息,它还支持一些标准的API,用来遍历或查询系统中的接口信息,它是CORBA动态调用不可缺少的组成部分。此外,ORB还通过伪对象接口CORBA∷ORB提供其他的通用API,这部分API既可以为客户程序使用,也可以由服务器程序使用(有关这部分的内容,将在“ORB接口”一节详细介绍)。基于以上的讨论,可将ORB核心的作用归纳如下(见图2):
工作方式
静态方式
为了更好地理解CORBA的工作方式,我们先看一个杜撰的比喻。
假设有一个国王,身边有一群所谓的学者,如哲学家、数学家、神学家等等。实际上他们并没有什么知识,唯一的法宝就是每人都有一张神奇的“名片”,能帮助他们找到真正的答案。(参阅图3所示的过程)。
有一天,国王突然对哲学发生了兴趣,他找来最赏识的哲学家,向他提了一个问题(见图3中①)。
哲学家对这个问题一窍不通,于是他按照“名片”上的信息打了一个电话,电话通往一个遥远的国度(见图3中②)。接电话的是一位哲学家的伙伴,其实他什么也不懂,但他是一位真正“先知”的私人代表,他把这个问题转达给了他的主人———那位隐居的“先知”(见图3中③)。
那位先知思考后,对问题作了详尽的回答(见图3中④)。
哲学家的伙伴对着话筒转达了全部的内容(见图3中⑤)。
第二天,哲学家对国王宣布了这个答案(见图3中⑥)。
如果把打电话改为写信,那么这个杜撰的情节几千年前就可能发生,其实,CORBA在“情节”上并不比它复杂。
那位国王就是客户(client),他的哲学家就是码根(stub),其它的“学者”们也都是码根,只不过各自对应的接口(能解决的问题)不同。国王询问哲学家,就是客户调用码根,那张神奇的“名片”就是对象引用(Object Reference),而负责通信的电话机就是ORB核心。哲学家根据名片,通过电话找到的那位哲学家伙伴就是静态框架(skeleton),而情节中那位隐居的“先知”,就是对象实现(Object Implementation)。
问题被一步步的传递,就是请求的过程,哲学家的伙伴接电话,就是接受请求的过程。先知在思考的时候,就是请求被执行的过程,答案被一步步传递,就是返回结果的过程。
在静态方式中,码根事先由IDL接口文件编译生成,它包括代理对象的定义和实现。代理对象的定义与IDL接口中的定义相一致,包括名字、操作、参数等等方面,代理对象的实现封装在代理对象内部,它实际上并没有执行客户所期待的实现,而是把客户的请求编组后交给ORB核心,等待远端的对象实现执行这一操作。执行后得到的返回参数和结果将通过ORB核心传回给码根进行解组,然后由码根以本地操作的方式把返回参数和结果送回给等待结果的客户端程序。
客户端程序通过对象引用直接调用码根中定义的各项操作。在静态方式中,框架事先由IDL接口文件编译生成,特定的框架接受特定的、对某个接口的请求。
动态方式
假设上面杜撰的情节发生了变化,国王新聘请了一位秘书,每当遇到问题,身边又没有一位学者可以“解答”时,国王就从名片簿中挑出一张他认为可以解决这个问题的专家的名片,将它递给秘书,秘书并不宣称自己是某个问题的专家,其工作只是按照国王的旨意,根据名片的内容给对方打电话,并将获得的解答告诉国王。
这就是动态调用方式,那位全能的秘书就是DII,而存放名片信息的名片簿就是接口库。
相对静态方式而言,动态方式有以下几个优点:
然而,与静态方式相比,动态方式有以下的缺点:
上述动态方式与静态方式的速度比较,只是定性的,其定量的比较,在很大程度上依赖于具体ORB的实现,在《Instant CORBA》一书中,作者实验的结论是,动态方式大约比静态方式慢40倍。因此,程序员在考虑采用动态方式之前,应适当平衡其对灵活性和速度的要求。通常,在客户端频繁地调用服务器对象,且服务器对象无变化的情况下,可以使用静态预编译码根的方式;而当客户端很少调用服务器对象,或者客户端在运行时发现服务器对象时,可以考虑使用动态调用方式。在同一个程序中,可以既使用动态方式,又使用静态方式,如图4所示。
应用
电信领域应用-TMN
TMN(电信管理网),随着网络信息技术的飞速发展,网络设备日趋先进,网络业务日趋丰富,网络结构日趋复杂,这一切都需要一个智能化的网络管理系统来加以管理。
不同的国际组织和论坛制定了许多网络管理方面的标准和规范,例如ITU-T(国际电联)制定的用于电信网络管理的TMN,IETF制定的用于Internet网络管理的SNMP协议,W3C制定的用于计算机桌面管理的WBEM,等等。TMN标准由一组协议文档组成,主要包括ITU-TX.700系列和ITU-TM.3100系列建议,它涵盖了电信管理网的体系结构、功能需求、信息模型、协议、一致性和方法学等诸多方面。它实际上是由ITU-TStudyGroup7和ISO(国际标准化组织)最早于1988年共同制定的,此后经历了多次的修订和完善。TMN不仅用于管理OSI(开放系统互联)协议,也用于管理整个网络。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市