sospettavo che l'host di servizio non era un istanza della classe di servizio, e Carlos Figueira ha confermato che nella sua risposta a [Is it necessary to Dispose() when using a custom ServiceHostFactory?].
Il CreateServiceHost()
in fabbrica era stato chiamato più volte per la mia domanda, lanciando un ArgumentException
la seconda volta che è stato inizializzato, con il messaggio:
The value could not be added to the collection, as the collection already contains an item of the same type: ....
WCF volte riutilizza il servizio di accoglienza. Ho risolto il problema verificando se uno qualsiasi dei miei comportamenti personalizzati fosse già presente nell'elenco del Servicehost Description.Endpoints.Behaviors
, quindi non ho inizializzato il mio host di servizio una seconda volta. In pratica, il mio caso era più semplice perché stavo impostando lo ServiceAuthorizationManager
; se l'ho trovato già impostato, ho evitato di inizializzare di nuovo qualcosa.
Che cos'è il "InstanceContextMode' del servizio? Inoltre, cosa stai facendo nel tuo codice di inizializzazione? È costoso e puoi memorizzarlo nella cache in modo da farlo solo una volta? – Tim
InstanceContextMode = PerSession e il codice di inizializzazione potrebbe essere costoso e deve essere eseguito una volta sola. –
Il risultato dell'inizializzazione è qualcosa che è possibile memorizzare nella cache? – Tim