2011-05-26 90 views
3

我有一个WCF服务,我的客户拨打电话时,告诉它运行storedprocedure1,与param1, param2是否WCF缓存存储过程

当WCF服务得到这个电话,它实例化实例化一个类DAO类。 DAO类创建连接,将参数加载到SqlCommand对象中,然后执行该对象。

完成后,它会关闭SqlConnection,但不会关闭或部署DAO类,因为它需要运行多个过程。

这是问题所在。如果我编辑storedprocedure1然后通过WCF服务调用它,我在storedprocedure1中所做的更改不会反映,直到我重新启动WCF服务。它像storedprocedure1缓存在WCF中。

有没有其他人经历过这个,有没有解决方案?

回答

0

我觉得关键可能就在于此声明:

,但不会关闭或处置DAO 类

在没有看到代码为您DAO类很难说,但查询结果似乎更有可能被数据访问层缓存,而不是被WCF缓存。

无论哪种方式,它确实与存储过程无关,它只是缓存执行存储过程的结果。如果您更改了数据而不是更改过程,则应该存在相同的问题 - 您会收回过时的数据。

+0

不这么认为。 SQLCommand在using子句中实例化。另外,当我关闭连接时,我将其处理掉。我已经改变了我的dao类来实现IDisposable,我们会看看是否修复它。 – edepperson 2011-05-27 12:46:14

+0

你说得对。即使我正在处理SqlConnection和SqlCommand,但不处理DAO就是允许WCF缓存它,或者保留执行计划等等。 我有道作为WCF调用的类中的私有变量。所以我做了以下改变; 1)更改我的DAO类来实现IDisposable并关闭并处理SQLConnection; 2)在使用条款中创建了我的dao,并且当这不可行时,最后尝试处理dao。所以现在它工作。感谢你在明显的挑战我。 – edepperson 2011-05-27 14:09:33

2

我想WCF服务正在缓存存储过程的结果。

看到这个:http://msdn.microsoft.com/en-us/library/ee230443.aspx

+0

默认情况下未启用输出缓存 - 如果发生这种情况,OP可能会意识到它。 – hemp 2011-05-26 20:04:41

+0

这里是用于WCF类 – edepperson 2011-05-27 12:36:55

+0

这里的属性被用于WCF类 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 属性但我从未明确启用缓存HTTP或在我的连接字符串中。 我应该提到,在用于测试的控制台应用程序中从ServiceHost运行WCF时会发生问题。 我没有看到IIS托管实例中的这个问题。我们很少更改存储过程时将其部署到IIS – edepperson 2011-05-27 12:43:19