在wcf调用之间保留对象?

时间:2010-12-13 20:10:33

标签: .net vb.net wcf web-services

这应该是相当基础的,但是我说我的WCF服务上有一个Public属性作为本地变量,我在一次调用服务时设置了它。有没有办法保留该数据以进行另一次服务调用? (不将数据写入xml或db,并重新引用它或类似的东西)

执行来自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

服务本身(有点笨拙,但行为仍然存在):

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

2 个答案:

答案 0 :(得分:1)

如果您只有一个服务实例,那么您可以将数据从一次调用保留到下一次。您应该考虑告诉我们您为什么要这样做,因为这听起来是个坏主意。

答案 1 :(得分:1)

如果我正确理解了这个问题,那么服务调用之间的服务实现状态就会丢失。您应该考虑设置服务实现的InstanceContextMode ServiceBehavior - 听起来它当前设置为PerCall,这样每个服务调用都会获得自己的实例。 PerSessionSingle可能是更好的选择。

虽然我不一定同意@John Saunders认为这是个坏主意,但要了解你想要实现的目标的更多细节会很有用。 :)