DB2 .NET提供程序建议

3
我们有一个AS400,需要使用我们的.NET应用程序进行通信。我们目前开发在运行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服务器 - 另一个选择是设置一个新的VM应用程序服务器,具有新的.NET提供程序,然后逐个移动应用程序,然后可以丢弃旧服务器。 - 交换DLL - 我没有尝试过这个,但我认为我可以使用新的.NET提供程序重新编译每个应用程序,并在服务器上的每个应用程序中交换包含DB2访问代码的DLL。(我已经在DB2提供程序周围使用了一个包装类,并且它在它自己的DLL中)。唯一可能的问题是如果我们的其他开发人员还没有使用新的AS400客户端版本,并且他们已经部署了应用程序。我们至少需要更新他们的AS400客户端。
谢谢!

1
很棒的问题。我没有答案。我希望IBM能支持多个版本。 - Mike Wills
不确定AS400的版本,但IBM的Linux、Unix、Windows版本支持多个版本。 - MrG
@vikrantislav,安装多个版本需要做一些特殊的事情吗?我们使用客户端安装程序来加载.NET提供程序...这将升级客户端软件到新版本。 - Dragn1821
2个回答

1

我的直觉是选择“Web服务”。使用像Ice这样绝对出色的性能的东西来隔离您的问题区域。包装您的业务级请求应该是容易的任务,您就不必再担心IBM产品版本的问题了。


谢谢你的回答!我确实喜欢 Web 服务的想法...但我仍然担心性能问题。我会去了解一下 Ice,看看我们将来是否可以使用它。 - Dragn1821

0

我们决定采用Linked Server,因为我们找出了如何解决性能问题。在使用OPENQUERY时,除了INSERT语句之外,一切都很快。使用EXECUTE方法也使得INSERT语句变得更快。

这里提供一些我们正在使用的查询示例,以防对其他人有所帮助...

Select

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

Insert

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

Update

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

Delete

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接