/// <summary>
        /// This method processes an unhandled payload.
        /// </summary>
        /// <param name="policy">The action policy.</param>
        /// <param name="reason">The unhandled reason.</param>
        /// <param name="payload">The payload.</param>
        protected virtual void ProcessUnhandledPayload(DispatcherUnhandledAction policy
                                                       , DispatcherRequestUnresolvedReason reason
                                                       , TransmissionPayload payload)
        {
            //OK, we have an problem. We log this as an error and get out of here.
            mDataCollection.DispatcherPayloadUnresolved(payload, reason);

            var args = new DispatcherRequestUnresolvedEventArgs(payload, reason, policy);

            //Raise an event for the unresolved wrapper
            mEventsWrapper.OnProcessRequestUnresolved(args);

            //Process the policy. Note this can be changed in the response.
            switch (args.Policy)
            {
            case DispatcherUnhandledAction.Ignore:
                break;

            case DispatcherUnhandledAction.AttemptResponseFailMessage:
                if (!payload.CanRespond())
                {
                    break;
                }

                var response = payload.ToResponse();
                response.Message.StatusSet(501, args.Reason.ToString());
                response.Message.ChannelPriority = -1;
                Dispatch.Process(response);
                //request.IsSuccess = true;
                break;

            case DispatcherUnhandledAction.Exception:
                //request.IsSuccess = true;
                break;
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DispatcherRequestUnresolvedEventArgs"/> class.
 /// </summary>
 /// <param name="payload">The payload.</param>
 /// <param name="reason">The failure reason.</param>
 public DispatcherRequestUnresolvedEventArgs(TransmissionPayload payload, DispatcherRequestUnresolvedReason reason, DispatcherUnhandledAction policy)
 {
     Payload = payload;
     Reason  = reason;
     Policy  = policy;
 }
Ejemplo n.º 3
0
 public static void DispatcherPayloadUnresolved(this IDataCollection collector, TransmissionPayload payload, DispatcherRequestUnresolvedReason reason)
 {
     collector.Write(new DispatcherEvent {
         Type = PayloadEventType.Unresolved, Payload = payload, Reason = reason
     }, DataCollectionSupport.Dispatcher);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// This method is called when an incoming request cannot be matched to a command within the Microservice.
 /// </summary>
 /// <param name="payload">The request payload.</param>
 /// <param name="reason">The reason the request was unsesolved</param>
 internal virtual void OnProcessRequestUnresolved(TransmissionPayload payload, DispatcherRequestUnresolvedReason reason)
 {
     try
     {
         ProcessRequestUnresolved?.Invoke(this, new DispatcherRequestUnresolvedEventArgs()
         {
             Payload = payload, Reason = reason
         });
     }
     catch (Exception ex)
     {
         mDataCollection?.LogException("OnUnhandledRequest / external exception thrown on event", ex);
     }
 }