/// <summary>
        /// /// push the result ticket out to the client. The client then needs to turn around and call GetAsyncResponseData
        /// or GetAsyncResponseStreamData to get the data
        /// </summary>
        /// <param name="targetClientProxy"></param>
        /// <param name="message"></param>
        /// <param name="dataAttachment"></param>
        /// <param name="streamAttachment"></param>
        /// <param name="response"></param>
        public void PublishSendResponseTicket(ClientProxy targetClientProxy, string message, object dataAttachment, Stream streamAttachment, AsyncMethodResponse response)
        {
            QueuedResponsePayload payload = null;

            if (dataAttachment != null ||
                streamAttachment != null)
            {
                payload = new QueuedResponsePayload(dataAttachment, response.AsyncTicket, response.ClientId, streamAttachment);
                if (payload.PayloadStream != null)
                {
                    string payloadStreamId = string.Format("{0}.{1}", response.ClientId, payload.PayloadTicket);
                    response.StreamDataId = payloadStreamId;
                    lock (streamIdToPayloadMap)
                        streamIdToPayloadMap[payloadStreamId] = payload;
                }
                else if (payload.PayloadData != null)
                {
                    lock (payloadTicketToResponseMap)
                        payloadTicketToResponseMap[payload.PayloadTicketGuid] = payload;
                }
            }

            Dictionary <Guid, ClientProxy> targetClientProxyMap = new Dictionary <Guid, ClientProxy>();

            targetClientProxyMap.Add(targetClientProxy.ClientId, targetClientProxy);
            PublishSendResponseTicketEventArg psrtea = new PublishSendResponseTicketEventArg(DateTime.UtcNow, response, message, payload);

            this.Publish(targetClientProxyMap, true, psrtea, this.publishSendResponseTicketHandler);
        }
        private void PublishSendResponseTicketHandlerProc(ClientProxy clientProxy, PublishEventArgs pea)
        {
            PublishSendResponseTicketEventArg psrtea = (PublishSendResponseTicketEventArg)pea;

            clientProxy.CallBack.OnPendingResponseObject(psrtea.Message, psrtea.Payload.PayloadTicket, psrtea.MessageTimeUtc, psrtea.Response);
        }