Chcę aby każde wywołanie mojej usługi WCF dodawało nagłówek, dla przykładu z userId. Więc mam metodę, która tworzy obiekt klienta do usługi WCF i zwraca go w miejsce, gdzie wywoływana jest już faktyczna metoda usługi.
Mam coś takiego. Czy właściwe jest Dispose'owanie obiektu operCtx? Czy jeśli z usługi zwracany jest wyjątek operCtx zostanie zwolnione? Bo channel przejdzie w status faulted, więc zdarzenie się wywoła.
MyWcfService.MyWcfServiceClient GetServiceClient(int userId)
{
var serviceCln = new MyWcfService.MyWcfServiceClient();
var operCtx = new System.ServiceModel.OperationContextScope(serviceCln.InnerChannel);
System.ServiceModel.OperationContext.Current.OutgoingMessageHeaders.Add(new System.ServiceModel.MessageHeader<int>(userId).GetUntypedHeader("User-ID", "http://example.com"));
serviceCln.InnerChannel.Closing += (s, e) => { operCtx.Dispose(); };
serviceCln.InnerChannel.Faulted += (s, e) => { operCtx.Dispose(); };
return serviceCln;
}
public bool Foo1(int userId, ...)
{
using (var client = GetServiceClient(userId))
{
return client.WcfFoo1(...);
}
}
Wiem jak zrobić to lepiej. Natomiast interesuje mnie analiza takiego przypadku. Gdzie tu zrobiłem błąd?