Dies sollte ziemlich einfach sein, aber ich habe eine öffentliche Eigenschaft als lokale Variable in meinem WCF-Dienst, und ich habe dies in einem Aufruf an den Dienst festgelegt. Gibt es eine Möglichkeit, diese Daten für einen weiteren Aufruf des Dienstes zu erhalten? (Ohne die Daten in XML zu schreiben oder eine db, und Neureferenzierungs-er oder ähnliches)Erhalten Sie Objekte zwischen den Aufrufen?
Ausführen der Anrufe aus dem 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
Der Service selbst (verdummt ein bisschen, aber das behaivor noch existiert):
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
Sieht so aus, als wenn ich den InstanceContextMode zu Single ändern würde, bleiben die Informationen zwischen den Anrufen bestehen. Danke euch allen. Wenn jemand gerne erklären würde, warum dies eine schlechte Idee ist, würde ich wirklich gerne wissen. Noch einmal Danke! StackOverflow ist ziemlich erstaunlich. – Kosko
Zustand in Web-Services im Allgemeinen sollte vermieden werden. Sie müssen nun auch den Zugriff auf Ihren Status verriegeln, damit sich zwei Anrufe nicht gegenseitig überschreiben. –
@John Saunders: Gibt es eine Chance, dass Sie einen Link haben, der weiter beschreibt, wie Sie den Zugriff sperren können? Ist es getan, indem der Code um by lock (this) {doStuff(); }, mit System.Threading.Interlock.Increment (Zähler); für Zähler und Vergleichen von Werten vor dem Überschreiben? – Kosko