在使用BizTalk WCF-OracleDB adapter操作Oracle数据库时,遇到了一些问题,记录如下。

按照BizTalk的文档,目前BizTalk 2010支持的Oracle数据库版本如下:

  • Oracle Database 11.1
  • Oracle Database 10.2
  • Oracle Database 10.1
  • Oracle Database 9.2
  • Oracle Data Access Components for Oracle Client 11.1.0.6 with Patch Set 11.1.0.7
  • Oracle Data Access Components for Oracle Client 11.1.0.7

初始环境:

Windows 7 旗舰版

BizTalk 2010 企业版 32Bit

VS2010 2010 旗舰版

准备环境:

1. 从Oracle官网下载Oracle express edtion 11G R2 并安装

2. 安装BizTalk LOB Adapter Packer

实施计划:

1. 使用VS2010添加使用WCF-OracleDBBinding生成的schema,这样会有一个Schema和一个Binding文件生成

2. 开发流程,接受一个本地查询的xml文件,转换成Oracle查询消息,查询Oracle数据库并将消息存在本地

3. 部署,导入binding创建发送端口,绑定流程和各个端口,启动。

4. 构造本地xml消息,放入BTS的接收端口,启动流程处理。

5. 查看输出文件夹,查询的结果应该以xml格式存在。

途中遇到的问题如下:

错误1

查询消息为

<ns0:Root xmlns:ns0="http://WCFOracleDemo.Input">
<Field>*</Field>
<Condition>ROWNUM < 10</Condition>
</ns0:Root>

执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“管道 ”,接收端口:“ReceivePort2”,URI:“D:\visual studio 2010\Projects\WCFOracleDemo\FileDrop\In\*.xml”,原因: 解析传入文档时出错:“名称不能以“ ”字符(十六进制值 0x20)开头。 第 3 行,位置 22。”。

解决办法:

忘记了处理xml中的非法字符了,

<ns0:Root xmlns:ns0="http://WCFOracleDemo.Input">
<Field>*</Field>
<Condition>ROWNUM &lt; 10</Condition>
</ns0:Root>

修改了查询的xml后,重试。

问题2:

适配器无法传输要发往发送端口“WcfSendPort_OracleDBBinding_HR_Table_EMPLOYEES_Custom”(URL 为“oracledb://jasonpc:1521/XE/Dedicated”)的消息。在为该发送端口指定的重试时间间隔过后,将会重新传输该消息。详细信息:“System.IO.FileNotFoundException: 未能加载文件或程序集“Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。系统找不到指定的文件。
文件名:“Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342”

排错步骤:

怀疑是assembly 版本2.111.7.0引用不正确,于是

1. 到Assembly里面查看这个DLL的信息,发现只有“Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”.

2. 在Machine.config,BTSNTSvc.config, Microsoft.Adapters.OracleDB.config三个文件里面都没有发现对这个DLL的引用信息。

解决方案:

1. 添加dependentAssembly,在BTSNTSvc.config文件中添加如下:

    <dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
<bindingRedirect oldVersion="2.111.7.0" newVersion="2.112.2.00"/>
</dependentAssembly>

重试。该错误解决。

可是,马上

问题3:

适配器无法传输要发往发送端口“WcfSendPort_OracleDBBinding_HR_Table_EMPLOYEES_Custom”(URL 为“oracledb://jasonpc:1521/XE/Dedicated”)的消息。在为该发送端口指定的重试时间间隔过后,将会重新传输该消息。详细信息:“System.TypeInitializationException: “Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。 ---> Oracle.DataAccess.Client.OracleException: 提供程序与此版本的 Oracle 客户机不兼容。

排错步骤:

为啥会有这样的错误呢,Oracle的客户机我都没有安装啊。。。为啥呢,为啥呢???!!!为啥用VS导入Schema都没有问题呢,为啥BizTalk就不认这货呢?

解决方案:

1. 在跑道Oracle官网下载Oracle Client 11G R2,安装。老是提示我‘PATH’检查失败,直接忽略了。

2. 再重试。

这下终于成功了。数据成功出现在输出文件夹。

回头再把在问题2中添加的dependentAssembly去掉,重启主机实例,跑一个,还是能看到输出数据。

看来最主要的是哪个client没有安装的原因。

总结:

微软的文档没有看仔细啊,操蛋的Client是需要安装的啊。另外,

  • Oracle Data Access Components for Oracle Client 11.1.0.6 with Patch Set 11.1.0.7
  • Oracle Data Access Components for Oracle Client 11.1.0.7

这是几个意思,Oracle的官网上ODAC只有11.1.0.7.20啊。而且根本下不来,每次都有99%就下不动了。。。

还有要注意的是:

在流程里面的Oracle端口的操作要和绑定里面的Action里面的Operation名称一样额。

BizTalk 中使用 WCF-OracleDB adapter的更多相关文章

  1. BizTalk Server 2016配置 WCF SAP Adapter

    BizTalk Server 2016配置 WCF SAP Adapter 最近公司内部需要使用BizTalk与SAP 系统进行对接,虽然SAP/PI可以以发布WebService 的方式实现与外部系 ...

  2. biztalk中使用WCF-SQL接受传送数据【转】

    接触biztalk时间不长,转载一篇学习教程: http://www.cnblogs.com/chnking/archive/2010/05/09/1731098.html chnking写的. 一. ...

  3. SharePoint 2013 中自定义WCF服务

    在使用SharePoint2013的时候,如果其他客户端 API 的组合不足,可以通过自定义 Web 服务扩展 SharePoint.默认情况下,SharePoint 2013 不仅支持创建自定义 A ...

  4. 个人项目中的WCF使用

    今天闲着无事,给大家分享一下我的一个项目中WCF的使用.我这项目使用的是Silverlight,至于其他类型的使用方法也是一样的. 1.建立一个Silverlight带Web项目的解决方案. 2.在w ...

  5. IIS8中添加WCF支持几种方法小结[图文]

    方法一 最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少 ...

  6. WCF分布式4:客户端访问寄宿在IIS中的WCF服务

    部署过程比较简单,新建一个站点,指向服务的物理路径,设置一个端口.即可. 新建的站点对应一个应用程序池,设置应用程序池中的.NET版本为4.0 写一个测试客户端,访问IIS中的WCF服务,可能会出现, ...

  7. 宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)

    1. 创建WCF服务 在vs2010中创建WCF服务应用程序,会自动生成一个接口和一个实现类:(IService1和Service1) IService1接口如下:   using System.Ru ...

  8. iPhone中调用WCF服务

    本文介绍的是跨平台iPhone中调用WCF服务,WCF是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由 .NET Framework 3.0+开始引入 iPhone中调用WC ...

  9. 解决IIS中部署WCF时,访问.svc文件的404错误问题

    如果你直接在IIS 7中配置WCF,访问.svc文件时会出现404错误.解决方法,以管理员身份进入命令行模式,运行:"%windir%\Microsoft.NET\Framework\v3. ...

  10. IIS配置svc(IIS8中添加WCF支持几种方法小结)

    方法一 最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少 ...

随机推荐

  1. PHP 扩展开发小结

    1. 变量操作(常量) 设置变量 ZVAL_*系列函数; 例: zval t; ZVAL_STRING(t,"10",2); 获取变量 Z_* 系列函数 获取变量指针 Z_*_P ...

  2. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  3. iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...

  4. [兼容]IE下textarea滚动条不能滚动

    在ie下,disable的textarea是不能使用滚动条的, 将disable改为readonly

  5. 省常中模拟 day2

    第一题: 题目大意: 有mn颗糖,要装进k个盒子里,使得既可以平均分给n个人,也可以平均分给m个人. 求k的最小值. 解题过程: 1.先看一组小数据(13,21).那么根据贪心的原则很容易想到先拿13 ...

  6. TreeSet和Comparator 对TreeSet排序

    使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList".&qu ...

  7. javascript的异步编程方法

    一,callback 回调函数 即函数f1和函数f2的关系是f1(f2()); f2作为f1()的回调函数,在f1执行过程中就开始执行f2,先执行线程的主要逻辑,将比较耗时的任务放在后面执行. 回调函 ...

  8. C++ using namespace std(转载)

    转载自http://www.kuqin.com/language/20080107/3532.html 感谢这位大神的解答! 以下的内容摘抄自转载的文章里面的部分内容. 早些的实现将标准库功能定义在全 ...

  9. system_call的处理过程

    一. 跟踪time系统调用 使用gdb调试跟踪系统调用内核函数sys_time 过程如下: 对sys_time设置断点之后,在menuOS中执行time命令,发现系统停在systime处,输入S单步执 ...

  10. MxNet下训练alexnet(一)

    1.图像经过工具包中的 make_lsit im2rec 转换为可调用各式.rec,.bin都可以 2.然后使用train_imageXXXX进行训练,参数需要对应 3.利用保存的模型进行估计,测试 ...