Cela devrait être assez basique, mais disons que j'ai une propriété publique en tant que variable locale sur mon service WCF, et je l'ai défini en un seul appel au service. Existe-t-il un moyen de conserver ces données pour un autre appel au service? (Sans écrire les données XML ou un db, et re-référencement ou quelque chose comme ça)Préserver les objets entre les appels wcf?
L'exécution des appels de la 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
Le service lui-même (abêtis un peu, mais la behaivor existe toujours):
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
On dirait que si je change le InstanceContextMode en Single, l'information persiste entre les appels. Merci tout le monde. Si quelqu'un voudrait expliquer pourquoi c'est peut-être une mauvaise idée, j'aimerais vraiment le savoir. Merci encore! StackOverflow est assez incroyable. – Kosko
l'état dans les services Web, en général, devrait être évité. Vous devez également maintenant verrouiller l'accès à votre état afin que deux appels ne se remplacent pas l'un l'autre. –
@John Saunders: avez-vous un lien qui décrit plus en détail comment verrouiller l'accès? Est-ce fait en enveloppant le code avec lock (this) {doStuff(); }, en utilisant System.Threading.Interlock.Increment (compteur); pour les compteurs, et en comparant les valeurs avant de les écraser? – Kosko