Example #1
0
        public async Task ExecuteAsync(Guid id, Uri url, CallbackResult result, CancellationToken cancellationToken)
        {
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }

            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            using (var client = this.factory.CreateClient())
                using (var request = new HttpRequestMessage(HttpMethod.Post, url))
                {
                    request.Headers.Add("X-Callback-ID", id.ToString());
                    request.Headers.Add("X-Callback-Status", result.Status);

                    if (result.Data != null)
                    {
                        var builder = new StringBuilder();
                        using (var wrtiter = new StringWriter(builder))
                        {
                            this.serializer.Serialize(wrtiter, result.Data);
                        }

                        var content = builder.ToString();
                        request.Content = new StringContent(content, Encoding.UTF8, "application/json");
                    }

                    var response = await client.SendAsync(request, cancellationToken);

                    switch (response.StatusCode)
                    {
                    case HttpStatusCode.OK:
                    case HttpStatusCode.Accepted:
                        return;

                    default:
                        throw new HttpRequestException($"Callback Execution return unexpected status ({response.StatusCode}).");
                    }
                }
        }
        public async Task AddHistoryAsync(Guid id, CallbackResult result, CancellationToken cancellationToken)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            using (var db = this.db.CreateDbContext())
            {
                await db.WebApiCallbackHistories.AddAsync
                (
                    new WebApiCallbackHistory
                {
                    CallbackId  = id,
                    Status      = result.Status,
                    Data        = JsonConvert.SerializeObject(result.Data),
                    InvokedTime = DateTime.UtcNow,
                }
                );

                await db.SaveChangesAsync(cancellationToken);
            }
        }