DB2 .NET提供程序建议

时间:2011-09-13 14:08:52

标签: .net db2 provider

我们需要使用我们的.NET应用程序与AS400进行通信。我们目前正在开发在Windows 2003/2008上运行的Web应用程序,并且必须运行AS400客户端安装,以便在运行使用该提供程序的Web应用程序的每台服务器上加载.NET提供程序。

通过AS400客户端安装,我们的开发客户端也加载了提供程序。

我们目前遇到的问题是,当我们将客户端PC更新到Windows 7时,我们被迫更新了AS400客户端访问软件。这当然要求我们更改.NET项目中使用的DLL,如果我们需要对我们的应用程序进行更改,则需要我们在服务器上加载新版本的.NET提供程序。

问题是,如果我们有许多Web应用程序都使用这个.NET提供程序并且我们突然加载新版本,它将打破所有Web应用程序,直到我们可以更改每个项目中的DLL并将它们重新部署到服务器

我一直在努力寻找一些可能的解决方案,并想知道哪种解决方案最好?或者,如果有更好的想法来解决这个问题?

  • 链接服务器 - 我们通过SQL 2005将链接服务器设置到AS400,它确实有效,但它很慢,不适用于Entity Framework。对于SELECT查询来说,这似乎足够快,但是插入非常慢,并且查询需要使用更复杂的涉及OPENQUERY的SQL。我已经尝试将视图设置为直通到DB2表,但查询要么比OPENQUERY慢,要么它们有时不起作用。

  • Web服务 - 我考虑过通过单个Web服务包装所有DB2通信,当更新出现时,我们只需要担心一个故障点。我在这里担心速度和向后兼容性。

  • DLL包装器 - 我还考虑将DB2功能包装在我自己的类库中,然后将其加载到GAC中。再次,单点故障。但是,我从来没有搞过GAC,所以我不确定会引入什么新问题,我仍然会有后向兼容性担心。

  • 新VM服务器 - 另一个选择是使用新的.NET提供程序设置新的VM应用程序服务器,然后逐个移动应用程序,然后可以丢弃旧服务器。

  • 交换DLL - 我没试过这个,但我假设我可以使用新的.NET提供程序在我的开发人员客户端上重新编译每个应用程序,然后在每个应用程序上交换包含DB2访问代码的DLL在服务器上。 (我已经在DB2提供程序周围使用了一个包装类,它位于它自己的DLL中)。这里唯一可能的问题是,如果我们的其他开发人员尚未使用新的AS400客户端版本,并且他们已将应用程序部署到服务器。我们至少需要更新他们的AS400客户端。

谢谢!

2 个答案:

答案 0 :(得分:1)

我的直觉是去“网络服务”。使用具有绝对Iceawesome performance之类的内容来隔离您的问题区域。包装业务级别请求应为easy task,您不必再担心IBM产品版本了。

答案 1 :(得分:0)

在确定如何解决性能问题之后,我们决定使用链接服务器。使用OPENQUERY,除了INSERTS之外,一切看起来都很快。使用EXECUTE方法也可以快速插入INSERTS。

以下是我们正在使用的查询的一些示例,这可能会帮助其他人......

选择

SELECT * FROM OPENQUERY(Linked_Server_Name,'SELECT * FROM table WHERE field =''Data''')

插入

EXECUTE('INSERT INTO Server.Library.Table(field1,field2)VALUES(1,''two'')')AT [Linked_Server_Name];

<强>更新

UPDATE OPENQUERY(Linked_Server_Name,'SELECT * FROM Library.Table WHERE field =''Data''')SET field ='新数据'WHERE字段='数据'

删除

DELETE FROM OPENQUERY(Linked_Server_Name,'SELECT * FROM Library.Table WHERE field =''Data''')WHERE field ='Data'

注意:要转义SQL中的单引号,请使用另一个单引号。这不是双引号。