6

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

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

背景

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

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

4

4 回答 4

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 数据访问组件包。

    (A) 当前版本是 ODAC 11.2 Release 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 和 set 一样引用Oracle.DataAccess.ClientCopy 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;
    

笔记

A. 即时客户端有两个主要版本 - 完整版(约 115mb),包括多语言支持,以及精简版(约 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


总结和结果:

您现在可以将 ClickOnce 部署用于所有 Windows 客户端应用程序 - fat、thing 或 smart。

于 2009-07-28T18:46:18.077 回答
3

Instant Client支持 xcopy 部署,因此相同的方法(包括它们在 ClickOnce 部署中)应该可以进行部署。

然而!在许多情况下,使用“智能客户端”方法可能更合适(使用 ClickOnce),即通过 Web 服务通过应用服务器进行数据访问。那么客户端中不需要任何 DAL 组件。

于 2009-07-28T10:14:41.983 回答
1

有可能,请参阅http://ora-00001.blogspot.com/2010/01/odpnet-minimal-non-intrusive-install.html

于 2010-09-01T07:06:23.660 回答
0

XCOPY 部署是最接近使用 ODP.NET 进行一次单击的部署。

我刚刚回复了您的另一篇文章,这里将详细介绍 XCOPY 部署。

请看一看:

如何编写适用于 SqlServer 和 Oracle 的 .Net 应用程序(现在不推荐使用 System.Data.OracleClient)

克里斯蒂安·谢伊·甲骨文

编辑:甲骨文宣布,他们将在 2011 年的某个时候发布完全托管的 ODP.NET 提供程序(又名瘦客户端)版本。发生这种情况时,ODP.NET 将不会依赖任何其他文件,并且 ClickOnce 部署将更加简单。

请随时在我们的功能请求网站上提供有关此功能和其他未来功能的反馈:http ://apex.oracle.com/pls/apex/f?p=18357:46

于 2009-07-30T23:37:17.530 回答