Example #1
0
        /// <summary>
        /// Sets the ResultCode for the specified ResultSummary object to the specified value.
        /// </summary>
        /// <param name="resultSummary">
        /// The ResultSummary object whose ResultCode to set.
        /// </param>
        /// <param name="value">
        /// The value to which to set the ResultSummary's ResultCode.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// Parameter resultSummary cannot be null.
        /// </exception>
        public static void SetResultCode(this ResultSummary resultSummary,
                                         ResultCode value)
        {
            if (resultSummary == null)
            {
                throw new ArgumentNullException("resultSummary", "Parameter resultSummary cannot be null.");
            }

            // Set the ResultCode and the corresponding Explanation.
            resultSummary.ResultCode  = value.ToString();
            resultSummary.Explanation = ResultCodeExplanation.Get(resultSummary.GetResultCode());
        }
Example #2
0
        private static void BuildResponse(CommerceContext context,
                                          Exception ex,
                                          Action <HttpResponseMessage,
                                                  HttpStatusCode,
                                                  CallCompletionStatus> completeResponse)
        {
            ResultSummary resultSummary = (ResultSummary)context[Key.ResultSummary];

            // If an exception is specified, set the result code accordingly.
            if (ex != null)
            {
                resultSummary.SetResultCode(ResultCode.UnknownError);
            }

            // Log the response.
            object response = context[Key.Response];

            context.Log.Verbose("{0} response:\r\n{1}", context.ApiCallDescription, General.SerializeJson(response));

            // Get response status code.
            ResultCode     resultCode     = resultSummary.GetResultCode();
            HttpStatusCode httpStatusCode = MapResultToStatusCode(resultCode);

            // Log the result and get call completion status.
            CallCompletionStatus callCompletionStatus = CallCompletionStatus.Success;

            if (httpStatusCode == HttpStatusCode.OK ||
                httpStatusCode == HttpStatusCode.Created ||
                httpStatusCode == HttpStatusCode.Accepted)
            {
                context.Log.Information("{0} call processed successfully.", context.ApiCallDescription);
            }
            else
            {
                if (ex != null)
                {
                    callCompletionStatus = CallCompletionStatus.Error;
                    context.Log.Critical("{0} call ended with an error.", ex, context.ApiCallDescription);
                }
                else
                {
                    callCompletionStatus = CallCompletionStatus.SuccessWithWarnings;
                    context.Log.Warning("{0} call unsuccessfully processed.\r\n\r\nResultCode: {1}\r\n\r\nExplanation: {2}",
                                        (int)resultCode, context.ApiCallDescription, resultSummary.ResultCode,
                                        resultSummary.Explanation);
                }
            }

            // Next, build the HttpResponseMessage for the call.
            HttpResponseMessage httpResponseMessage = null;

            if (context[Key.Request] != null)
            {
                HttpRequestMessage request = (HttpRequestMessage)context[Key.Request];
                httpResponseMessage = request.CreateResponse(httpStatusCode, response);
                AddPerformanceInformation(context, request.RequestUri.Query, httpResponseMessage.Headers);
            }

            // Finally, complete the response.
            completeResponse(httpResponseMessage, httpStatusCode, callCompletionStatus);
        }