public TRep TraceRequests <TReq, TRep>(TReq request, Func <TReq, TRep> action) where TReq : DxStoreAccessRequest where TRep : DxStoreAccessReply { Trace accessClientTracer = ExTraceGlobals.AccessClientTracer; bool flag = accessClientTracer.IsTraceEnabled(TraceType.DebugTrace); bool flag2 = accessClientTracer.IsTraceEnabled(TraceType.ErrorTrace); if (!flag && !flag2) { return(action(request)); } TRep trep = default(TRep); try { if (flag) { string arg = Utils.SerializeObjectToJsonString <TReq>(request, false, true) ?? "<serialization error>"; accessClientTracer.TraceDebug <string, string>(0L, "Sending Request: {0}{1}", typeof(TReq).Name, arg); } trep = action(request); } catch (Exception ex) { if (flag2) { string arg2 = "<none>"; FaultException <DxStoreServerFault> faultException = ex as FaultException <DxStoreServerFault>; if (faultException != null) { DxStoreServerFault detail = faultException.Detail; arg2 = (Utils.SerializeObjectToJsonString <DxStoreServerFault>(detail, false, true) ?? "<serialization error>"); } accessClientTracer.TraceDebug <string, string, Exception>(0L, "Send failed - Request: {0} - Fault: {1} - Exception: {2}", typeof(TReq).Name, arg2, ex); } throw; } if (flag) { string arg3 = (trep != null) ? (Utils.SerializeObjectToJsonString <TRep>(trep, false, true) ?? "<serialization error>") : "<null>"; accessClientTracer.TraceDebug <string, string>(0L, "Received reply: {0}{1}", typeof(TRep).Name, arg3); } return(trep); }