2010-01-12 56 views
2

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

+0

这并不完全清楚你对问题的第二部分的含义。你确实在你的web服务中出错。但是你也可以使用webservice而不会出错。是: a)您使用另一套IN和OUT?如果是这样,问题就解决了;-) b)你只使用IN参数? – robertnl 2010-01-13 18:40:41

回答

2

仅供参考,存储过程在AS400上运行应该不重要。从您的ASP.NET webservice的角度来看,它使用的是常规的DB2数据库。顺便说一句,你如何从Web服务连接到数据库,ADO.NET,ODBC或其他。

您是否尝试过从AS400 SQL命令外壳(STRSQL)调用存储过程?您是否尝试从客户端访问导航器SQL脚本调用存储过程?特别是如果最后一个工作,你的SP在技术上是正确的。请注意,您可以在CA Navigator中检索SP的定义。研究你的IN和OUT参数非常好,因为DB2对这些参数的类型不是很宽容。

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

现在,使用CA Navigator测试您的SP(每个AS400均有售)。如果可行,你的SP工作。然后你可以缩小你的问题到你的Web服务。

另外,在DB2中,您可以定义参数als INOUT。那也将是一个不错的实验。

+0

感谢@robertnl的帮助,我已经想通了。问题是SP调用AS400程序,并且从该程序发出返回参数。但是现在返回参数被缓存在SP中,并作为SP的输出参数传递给WS – neo 2010-01-18 13:40:07