ODP.NET和ClickOnce可能吗?

Ian*_*ose 6 .net clickonce ado.net odp.net

我们有一个与ClickOnce一起部署的sqlserver(WinForms)应用程序,它直接与数据库通信.如果我们被迫将它移植到oracle,ODP.NET可以与ClickOnce一起使用.

(用户可能没有PC上的管理员权限)

背景

此数据导入应用程序由每个客户站点上的少数用户使用,它使用集成登录连接到SQL Server.大多数用户访问系统var一个Asp.net应用程序,或一个与Web服务对话的WinForms(clickOnce)应用程序.

另请参阅" 如何编写适用于SqlServer和Oracle的.Net应用程序 "

one*_*mer 7

编辑:我已经修改了这个现代化的答案.另外,为了澄清,ClickOnce仅仅是一个应用程序部署工具,如何使用Oracle Client和ODP.Net与您的应用程序仍然由架构决定.以下是最常见方案的摘要:

智能客户端应用程序(例如客户端应用程序+ Web服务)

您的ClickOnce部署的客户端应用程序安装在用户的计算机上,但可以使用某种服务来处理数据.在此方案中,您的客户端应用程序不需要分发Oracle客户端或ODP.Net.

Oracle客户端和ODP.Net软件包应通过Oracle在托管后端服务的计算机上的正常指令进行安装,并从该项目/应用程序中引用,因为任何其他库都将被使用/分发.

胖客户端"精简部署"应用程序(例如Citrix上的"胖客户端")

您的ClickOnce部署的客户端应用程序"很胖",因为它包含自己的数据层,因此必须能够通过本地安装的客户端连接到Oracle,并且能够引用ODP.Net库.

在此方案中,Oracle客户端和ODP.Net软件包应使用Oracle的标准说明安装在托管计算机(例如Citrix框)上,并且您的应用程序应引用其托管计算机上安装的相应库.

胖客户端"胖部署"应用程序(例如用户机器上的胖客户端)

在这种情况下,您的应用程序是典型的"胖客户端",因为它有自己的数据层,需要能够与Oracle客户端和ODP.Net库进行通信.

我们在这里讨论的特定方案是如何在您的应用程序中分发Oracle客户端和ODP.Net(例如,当您的用户未在其计算机上安装这些产品时).以下是说明:

  1. 下载Oracle Data Access Components包.

    (A)当前版本是ODAC 11.2版本4(11.2.0.3),包括对Microsoft Entity Framework 4的支持.

    (B)您需要安装32位版本的ODP.Net,因为Visual Studio是一个32位应用程序.然后,您可以在部署时编译为目标处理器和位版本.

  2. 在ODAC包中有Oracle Instant Client和ODP.Net库.您需要将即时客户端库复制到您的应用程序并将其设置为"始终复制"

  3. 像任何其他lib一样引用Oracle.DataAccess.Client并设置Copy Local = True.

  4. 您的连接字符串应该与TNSNAMES.ORA文件中的普通条目非常相似:

     Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SID = oracle_world_here)));User Id=schema_here;Password=password_here;Persist Security Info=TRUE;
    
    Run Code Online (Sandbox Code Playgroud)

笔记

答:即时客户端有两个主要版本 - 完整版(约115mb),包括多语言支持,以及Lite版本(约28mb),仅支持英语.

B. 重要事项确保部署的库都来自同一版本的客户端 - 这意味着如果部署32位ODP.Net,则必须部署32位即时客户端库.如果您使用11.2即时客户端,则无法使用11.0 ODP.Net等 - 愚蠢但很多人忽略了这一点; 使用良好的源控制.

C.我的经验,以下库放在我的项目的根目录中(以避免任何权限问题或%PATH%)

oci.dll,ociw32.dll,orannzsbb11.dll,oraocci11.dll,oraociicus11.dll,oraops11w.dll


摘要和结果:

您现在可以对所有Windows客户端应用程序使用ClickOnce部署 - 胖,东西或智能.