【问题标题】:Calling AS400 SP from ASP .NET webservice从 ASP .NET Web 服务调用 AS400 SP
【发布时间】:2010-01-12 09:27:24
【问题描述】:

我在 AS400 中有一个带有 IN 和 OUT 参数的外部存储过程 (SP)。当我的 SP 从带有 IN 和 OUT 参数的 web 服务调用时,它显示一个错误 (Attempted to read or write protected memory)。但是当 web 服务具有所有将参数设置为 IN 模式并调用我的 SP,它可以正常工作。

【问题讨论】:

  • 问题的第二部分尚不清楚您的意思。您的网络服务确实出现错误。但是您也可以毫无错误地使用网络服务。那是:a)您使用另一组IN和OUT?如果这是真的,问题就解决了;-) b) 你只使用 IN 参数?

标签: asp.net stored-procedures web-services ibm-midrange


【解决方案1】:

只是为了争论,您的存储过程在 AS400 上运行并不重要。从您的 ASP.NET Web 服务的角度来看,它使用的是常规 DB2 数据库。顺便说一句,您如何从 Web 服务连接到数据库、ADO.NET、ODBC 或其他东西。

您是否尝试过从 AS400 SQL 命令外壳 (STRSQL) 调用存储过程?您是否尝试过从 Client Access Navigator SQL 脚本调用存储过程?特别是如果最后一个有效,那么您的 SP 在技术上是正确的。请注意,您可以在 CA Navigator 中检索 SP 的定义。好好研究一下你的 IN 和 OUT 参数,因为 DB2 对这些参数的类型不是很宽容。

请注意,您在 as400 上的外部程序(ILE 还是非 ILE?)必须支持您为存储过程定义的参数类型。也许您的 IN 参数是正确的,但您的 OUT 参数不正确。因此,如果您的程序想要返回一个值,它可能会失败。此外,您可以定义一组不同的参数(例如 SQL 代替 JAVA)。我可以想象定义错误的集合会产生奇怪的效果。

现在,使用 CA Navigator 测试您的 SP(每个 AS400 都提供)。如果这有效,则您的 SP 有效。然后,您可以将问题缩小到您的 Web 服务。

此外,在 DB2 中,您可以将参数定义为 INOUT。这也是一个很好的实验。

【讨论】:

  • 感谢@robertnl 的帮助,我已经弄清楚了。问题是 SP 反过来调用了一个 AS400 程序,并且从该程序发出了返回参数。但是现在返回参数在 SP 中缓冲,并作为来自 SP 的输出参数传递给 WS
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2010-09-06
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多