这应该是相当基本的,但是说我在我的WCF服务上有一个公共属性作为局部变量,并且我在一次调用该服务时设置了它。有没有办法保存这些数据,以便再次调用服务? (如果没有写入数据到XML或DB,并重新对其进行引用或类似的东西)在wcf调用之间保留对象?
执行从Winform的来电:
Public Class ClientSideWinForm
Private proxy As ServiceReference.Client
Private Sub Client_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
proxy = New ServiceReference.Client
End Sub
Private Sub btnStartTests_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartTests.Click
addToTxtResults("Try Chk Program Valid...")
Try
addToTxtResults(proxy.RequestChkValidProgram("Some-serial-number")) 'returns true or false and instanciates the object server side
addToTxtResults(proxy.RequestFirstName()) ' returns nothing
Catch ex As Exception
addToTxtResults(ex.ToString)
End Try
End Sub
End Class
服务本身(简单化了一点,但behaivor仍然存在):
Public Class Service
Implements IService
Public Property X As String
Function RequestChkValidProgram(ByVal strSerialNumber As String) As Integer Implements IService.RequestChkValidProgram
X = "hello"
End Function
Function RequestFirstName() As String Implements IService.RequestFirstName
Return X
End Function
End Class
看起来像是如果我将InstanceContextMode更改为单个信息在调用之间持续存在。谢谢大家。 如果有人想详细说明为什么这可能是一个坏主意,我真的很想知道。再次,谢谢! StackOverflow是相当惊人的。一般来说,应避免在Web服务中使用状态 – Kosko 2010-12-13 20:44:16
。您现在还需要互锁访问您的状态,以便两个呼叫不会相互覆盖。 – 2010-12-14 01:21:05
@John Saunders:你有任何一个链接可以进一步描述如何互锁访问吗?它是通过用lock(this)包装代码来完成的{doStuff(); },使用System.Threading.Interlock.Increment(counter);为计数器,并在覆盖它们之前比较值? – Kosko 2010-12-14 13:31:45