這應該是相當基本的,但是說我在我的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