1

我正在使用 sp_oacreate 调用 web 服务。Web 服务只输出从数据库查询的字符串。这是顺序:

  • sp_oacreate -> 创建 MSXML2.XMLHTTP 的实例
  • sp_oamethod -> 打开连接
  • sp_oamethid -> 发送
  • sp_oamethod -> 获取响应文本
  • sp_oadestory -> 释放创建对象的内存

我尝试更改数据库中的数据以检查更改是否反映在 web 服务调用期间,但输出始终与第一次运行相同。似乎 sp_oadestroy 并不能真正释放内存,或者似乎它正在使用缓存。内存问题?

为了详细说明,这是一个示例运行和/我们的输出:

  • 更新数据库:1,2,3,4
  • 首次运行输出:1,2,3,4
  • 更新的数据库:1,2,3,4,5
  • 第二次运行输出:1,2,3,4
  • .... 以此类推,输出相同

我知道 CLR 最适合这个,但 CLR 在 SQL2000 中不可用,所以它不是替代方案。假设我真的必须在 SQL2000 中执行此操作。修补程序或补丁?假设管理员不允许或冒险(对此没有进一步的问题:D)

请对这个问题有所了解。非常感谢!

以下是部分代码:

SET @url = 'http://url_showtext.php?val1=1&val2=2'
EXEC sp_OACreate 'MSXML2.XMLHTTP', @object OUT
EXEC sp_OAMethod @object, 'open', NULL,'get', @url, 'false'
EXEC sp_OAMethod @object, 'send'
EXEC sp_OAMethod @object, 'responseText', @ResponseText OUTPUT
EXEC sp_OADestroy @object
select @ResponseText 

顺便说一句,请不要过多地询问或嘲笑我为什么使用 sp_oacreate 并通过 sql 调用这个 web 服务。我已经看到了很多这样的事情,他们并没有帮助达到这一点,真的。谢谢!

4

2 回答 2

2

如果其他人偶然发现这个问题,我将不得不回答我自己的问题:

只需在网页上方添加“no-cache”声明即可。在我的例子中, sp_oamethod 只是调用了一个简单的 asp 经典页面。

因此,只需在 asp 页面中添加:

Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache" 
于 2013-06-30T13:29:20.293 回答
1

您无需对任何内容进行任何更改。检索到的页面实际上是由 Internet Explorer 缓存的

因此,您只需在 Internet Explorer/Internet 选项/临时 Internet 文件和历史记录设置/检查存储页面的较新版本中设置选项“每次访问网页”

于 2014-01-29T03:41:48.853 回答