Пример #1
0
        private ReplicationInfoStatus[] CheckDestinations(ReplicationDocument replicationDocument)
        {
            var results = new ReplicationInfoStatus[replicationDocument.Destinations.Count];

            Parallel.ForEach(replicationDocument.Destinations, (replicationDestination, state, i) =>
            {
                var url = replicationDestination.Url;

                if (!url.ToLower().Contains("/databases/"))
                {
                    url += "/databases/" + replicationDestination.Database;
                }

                var result = new ReplicationInfoStatus
                {
                    Url    = url,
                    Status = "Valid",
                    Code   = (int)HttpStatusCode.OK
                };

                results[i] = result;

                var ravenConnectionStringOptions = new RavenConnectionStringOptions
                {
                    ApiKey          = replicationDestination.ApiKey,
                    DefaultDatabase = replicationDestination.Database,
                };
                if (string.IsNullOrEmpty(replicationDestination.Username) == false)
                {
                    ravenConnectionStringOptions.Credentials = new NetworkCredential(replicationDestination.Username,
                                                                                     replicationDestination.Password,
                                                                                     replicationDestination.Domain ?? string.Empty);
                }

                var requestFactory = new HttpRavenRequestFactory();
                var request        = requestFactory.Create(url + "/replication/info", HttpMethods.Post, ravenConnectionStringOptions);
                try
                {
                    request.ExecuteRequest();
                }
                catch (WebException e)
                {
                    FillStatus(result, e);
                }
            });

            return(results);
        }
Пример #2
0
        private void FillStatus(ReplicationInfoStatus replicationInfoStatus, WebException e)
        {
            if (e.GetBaseException() is WebException)
            {
                e = (WebException)e.GetBaseException();
            }

            var response = e.Response as HttpWebResponse;

            if (response == null)
            {
                replicationInfoStatus.Status = e.Message;
                replicationInfoStatus.Code   = -1 * (int)e.Status;
                return;
            }

            switch (response.StatusCode)
            {
            case HttpStatusCode.BadRequest:
                string error = GetErrorStringFromException(e, response);
                replicationInfoStatus.Status = error.Contains("replication bundle not activated")
                                                           ? "Replication bundle not activated."
                                                           : error;
                replicationInfoStatus.Code = (int)response.StatusCode;
                break;

            case HttpStatusCode.PreconditionFailed:
                replicationInfoStatus.Status = "Could not authenticate using OAuth's API Key";
                replicationInfoStatus.Code   = (int)response.StatusCode;
                break;

            case HttpStatusCode.Forbidden:
            case HttpStatusCode.Unauthorized:
                replicationInfoStatus.Status = "Could not authenticate using Windows Auth";
                replicationInfoStatus.Code   = (int)response.StatusCode;
                break;

            default:
                replicationInfoStatus.Status = response.StatusDescription;
                replicationInfoStatus.Code   = (int)response.StatusCode;
                break;
            }
        }