您的位置:首页 > 数据库 > Oracle

BizTalk 中使用 WCF-OracleDB adapter

2015-01-17 11:32 323 查看

在使用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 < 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名称一样额。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: