• BizTalk 中使用 WCF-OracleDB adapter


    在使用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 2010ProjectsWCFOracleDemoFileDropIn*.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名称一样额。

  • 相关阅读:
    滑动窗口(单调队列)
    离散化
    leetcode第196场周赛
    WindowsForm实现警告消息框
    WindowsForm实现TextBox占位符Placeholder提示
    WindowsForm如何移动一个没有标题栏的窗口
    WindowsForm给窗口添加一些简单的动画效果
    WindowsForm切换窗口的几种常见实现
    Visual Studio Code搭建django项目
    PyInstaller打包Python源程序
  • 原文地址:https://www.cnblogs.com/JasonLiao/p/4230269.html
Copyright © 2020-2023  润新知