Наше приложение вызывает внешние услуги, такие какМожно ли отслеживать все исходящие вызовы WCF?
//in client factory
FooServiceClient client = new FooServiceClient(binding, endpointAddress);
//in application code
client.BarMethod(); //or other methods
Можно ли отслеживать все эти вызовы (например, события или что-то подобное), так что приложение может собирать статистические данные, как номер вызова, время отклика и т.д. ? Обратите внимание, что моему приложению необходимо получить доступ к значениям, а не только для записи в файл журнала.
Что я могу думать, чтобы создать подкласс VisualStudio сгенерированного FooServiceClient, а затем добавить коды, как этот
override void BarMethod()
{
RaiseStart("BarMethod");
base.BarMethod();
RaiseEnd("BarMethod);
}
и метод RaiseStart и RaiseEnd поднимет события, которые будут слушать мой код.
Но это кажется утомительным (потому что есть много способов переопределить), и есть много повторяющихся кодов, мой код должен меняться каждый раз, когда изменяется контракт на обслуживание, и т. Д. Есть ли более простой способ достичь этого, например, используя отражение для создания подкласса или путем использования встроенного метода в WCF, если таковые имеются?
классный. Но кажется, что с IClientMessageInspector мы не можем получить ничего, если сообщение было остановлено, например из-за недоступного сервера. Вы знаете, как смотреть, когда такая ошибка происходит? –
Я не уверен, если честно, если на сервере возникнут какие-либо ошибки при вызове операции, ответ будет получен клиентом, и вы можете поймать их в IClientMessageInspector.AfterReceiveReply, потому что сообщение будет иметь свойство IsFault true. Я не уверен, что вы все равно получите ответ, если клиент не сможет получить доступ к серверу. – Matt