static public async Task <ToCustomBotSnapshot> RequestSnapshotAsync(
            string ApiUri,
            FromCustomBotSnapshot FromBotSnapshot = null)
        {
            string RequestData = null;

            if (null != FromBotSnapshot)
            {
                RequestData = ToCustomBotSnapshot.SerializeToString(FromBotSnapshot);
            }

            string ResponseData = null;

            using (var client = new WebClient())
            {
                client.Encoding = Encoding.UTF8;
                client.Headers[HttpRequestHeader.ContentType] = "application/json";

                ResponseData = await client.UploadStringTaskAsync(ApiUri, "POST", RequestData ?? "");
            }

            if (null == ResponseData)
            {
                return(null);
            }

            return(ToCustomBotSnapshot.DeserializeFromString <ToCustomBotSnapshot>(ResponseData));
        }
 public SnapshotRequest(
     string ApiUri,
     int DurationLimit,
     FromCustomBotSnapshot FromCustomBotSnapshot = null)
 {
     this.ApiUri                = ApiUri;
     this.DurationLimit         = DurationLimit;
     this.FromCustomBotSnapshot = FromCustomBotSnapshot;
 }
        static public async Task <SnapshotRequestResult> RequestSnapshotAsyncEncapsulated(
            string ApiUri,
            int DurationLimit,
            FromCustomBotSnapshot FromBotSnapshot = null)
        {
            var Time = Bib3.Glob.StopwatchZaitMiliSictInt();

            System.Exception    Exception        = null;
            ToCustomBotSnapshot ResponseSnapshot = null;

            try
            {
                if (null == ApiUri)
                {
                    throw new ArgumentNullException("ApiUrl");
                }

                var ResponseSnapshotTask =
                    RequestSnapshotAsync(ApiUri, FromBotSnapshot)
                    .TimeoutAfter(DurationLimit);

                ResponseSnapshot = await ResponseSnapshotTask;
            }
            catch (System.Exception tException)
            {
                Exception = tException;
            }
            finally
            {
            }

            return(new SnapshotRequestResult(
                       Time,
                       Exception,
                       ResponseSnapshot));
        }