Zaimplementowałem IClientMessageInspector
do "przechwytywania" wychodzącego połączenia usługi WWW w mojej aplikacji. Czy można sprawdzić, która operacja jest wywoływana z poziomu BeforeSendRequest
i?Jak uzyskać nazwę wywoływanej operacji w obiekcie IClientMessageInspector?
Istnieje podobne pytanie tutaj, How do i get the invoked operation name within a WCF Message Inspector, które jest po stronie serwera (strona odbierająca żądanie). Próbowałem zrobić coś podobnego, np.
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
}
ale podczas żądania wychodzącego wydaje się, że OperationContext.Current jest zerowy, więc nie mogę używać. Masz pomysł, jak go zdobyć? Każdy pomysł, jak to zrobić w sposób czysty (w przeciwieństwie do, powiedzmy, parsować xml SOAP)?
Jest to trudne, ponieważ jesteś tak nisko w stosie klienta, że informacje naprawdę potrzebujesz jest zawinięty w obiekt wiadomości. Czy masz szansę skorzystać z pomocy innego inspektora? Na przykład stosuje się IParameterInspector na operację i dlatego jest prosty. Pozwoli to również uniknąć wiązania konkretnych rozwiązań, takich jak HTTPOperationName. – ErnieL
jak działałby Inspektor parametrów? –