【问题标题】:MV.NET calls much slower when website accessed remotely vs locally当网站远程访问与本地访问时,MV.NET 调用速度要慢得多
【发布时间】:2016-08-27 13:32:08
【问题描述】:

我有一个 asp.net webforms 页面,它通过 mv.net 调用 pick/d3。 我已经通过使用计时码包围 mv.net 调用来记录服务器端性能,例如: logTimeElapsed() getDataFromPick() 'gets 5 rows of test data logTimeElapsed()

当我从托管 iis 服务器调用此页面时,我得到快速响应时间,例如: newAC elapsed: 2.9297 total: 2.9297 Dim Acct As mvAccount = New mvAccount("...") row 1 elapsed: 20.5078 total: 23.4375 Acct.FileOpen("...").ReadV(strID, 17) row 2 elapsed: 9.7657 total: 33.2032 same as above row 3 elapsed: 11.7187 total: 44.9219 same as above row 4 elapsed: 11.7188 total: 56.6407 same as above row 5 elapsed: 9.7656 total: 66.4063 same as above Logout elapsed: 1.9531 total: 68.3594 Acct.Logout()

但是,当我从网络或网络上的另一个位置调用同一页面时,我得到的响应时间大约长 7 倍: new acct elapsed: 0 total: 0 Dim Acct As mvAccount = New mvAccount("...") row 1 elapsed: 156.25 total: 156.25 Acct.FileOpen("...").ReadV(strID, 17) row 2 elapsed: 78.125 total: 234.375 same as above row 3 elapsed: 78.125 total: 312.5 same as above row 4 elapsed: 78.125 total: 390.625 same as above row 5 elapsed: 78.125 total: 468.75 same as above Logout elapsed: 0 total: 468.75 Acct.Logout()

从上面的结果看是这样的:

本地访问时:

mv.net 需要几毫秒来创建和注销帐户,并且每次 FileOpen 调用都很快。

远程访问时:

mv.net 创建和注销帐户的时间为 0(重复使用共享帐户?),但每次 FileOpen 调用都很慢。

如何使远程性能与本地性能保持一致?是否要对 mv.net 或 iis 设置进行更改?
本地调用 iis 和远程调用 iis 时,用户权限是否有所不同?

任何帮助表示赞赏

【问题讨论】:

  • 旁注:我知道您正在尝试解决这里的特定问题,所以这可能是不合时宜的:多个Acct.FileOpen("...").ReadV() 操作在服务器上创建更多的工作以及使连接更多更健谈(增加交易时间)。我建议使用一个 FileOpen,然后对该对象进行一个或多个读取操作。您可以使用名称或 atb 引用在读取的单个 mvItem 中检索特定属性,因此您可以在单个语句中而不是多个语句中获得所需的内容,并且在不需要时无需将整个项目从 D3 连接到线上。 HTH

标签: asp.net iis pick multivalue-database


【解决方案1】:

我认为您的帐户配置文件已配置为相当快速地终止。因此,当您在本地进行测试时,您点击了几次,它看起来很快。然后您准备使用远程连接,在此期间与 D3 的连接终止。然后你进行连接,它必须再次登录到 D3,从而导致性能下降。

我的建议是将帐户配置文件设置为在注销时不终止。因此,此时所有连接都将使用相同的持久会话。您的本地连接将终止,然后当远程连接进入时,与 D3 的登录会话仍将处于活动状态,您不会感到新登录的痛苦。如果不是这样,请告诉我,我们会解决的。 :)

【讨论】:

  • 我现在会调查一下。有关更多信息,这是一位同事从 BlueFinity 收到的回复:其他人在这种情况下所做的是使用网络上的数据包嗅探器(例如 Wireshark)来诊断问题,因为它是不是 mv.NET。它与一些网络层问题有关,导致 telnet 性能不佳,进而影响 mv.NET 性能。
  • Bluefinity 似乎还不了解细节。为了清楚起见,我也想回顾一下我的理解:您有一个会话管理器,它具有与 D3 的单个 (?) 持久 Telnet (MVSP?) 连接。我猜它在运行 IIS 的同一个盒子上(?)。您正在使用 localhost 浏览器,点击该 IIS 并获得一个时间。您从另一台 PC 或网络外部访问同一台服务器、ASPX、DLL、web.config,您会得到不同的时间。您可以交替执行此操作并看到完全相同的奇怪结果。全对了?有趣的挑战。我会留意您的回复。
  • 从服务到 D3 的连接不会因客户端到服务而改变。所以问题一定是从你在 IIS 中的代码到服务,然后代理到 D3。在您的 mvAccount 实例化或 web.config 中,您使用的是主机名还是 IP 地址?我想知道是否涉及DNS。对于从 IIS 到套接字服务器的每个请求,都可能有一个主机名解析 - 不应该,但可能是。虽然本地客户端和远程客户端之间应该没有什么不同,但 IIS 可能会在那里做一些不同的事情。尝试使用 IP 地址访问会话管理器服务。
  • IIS 应用程序在应用程序池中运行。池具有权限。我想知道您是否使用http://localhost/apphttp://foo.tld/app 访问不同的应用程序池。如果是这样,可能会有额外的安全检查,因为 mv.NET 对管理器服务进行每个(localhost)网络调用(.NET Remoting?)。本地请求的安全性可能比远程请求更宽松——每个远程请求都可能会导致授权检查,这只是需要时间。我不知道如何测试这个理论,我希望你能用它来运行。 Bluefinity 关于网络层可能是正确的,但不是 Telnet 上的。
  • 我会考虑一下。您确实检查了 Windows 标识,这是我建议的。但对于咧嘴笑,请检查具体的app pool,以防它被设置为不同类型的身份验证。
【解决方案2】:

我在今年早些时候的一份工作中遇到了同样的问题。在那里,IIS 位于与 BlueFinity 会话和许可证管理器不同的服务器上。此外,Pick 系统是 D3。我们观察到的是托管会话和许可证管理器的机器的响应时间最好,而任何其他服务器的响应时间都长 2 倍。将会话和许可证管理器移至 IIS 服务器会提高该服务器的速度;将它们移动到另一台服务器可以提高该服务器的速度。确实很奇怪,因为所有请求在被处理之前都是通过互联网、WAF 和 IIS 发出的。

BlueFinity 团队观察到我们的测试应用程序的行为并尝试重新创建,但未能成功。他们测试的主要区别:

1) 我们使用 D3,而他们使用的是 jBASE 2) 我们使用 mv.NET 4.4 而他们使用的是 4.5 3)我们使用SSH,他们使用标准telnet

我知道这并不能真正回答您的问题,但我还没有足够的声誉来发表评论。虽然我不再与那家公司合作,但有趣的是,这个问题并不是他们的堆栈所独有的,更多的是与 BlueFinity 表面下的一些事情有关。不幸的是,在他们的优先事项列表中,寻找原因似乎并不重要。

【讨论】:

  • 据我了解,mv.NET 团队可能最终推动解决了这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2015-08-31
相关资源
最近更新 更多