private static IPromise <IHttpResponse> SendSync(SyncHttpClient service, HttpRequest req, LogData trace)
        {
            try
            {
                return(Promises.Resolved((IHttpResponse)service.Send(req)));
            }
            catch (System.Net.WebException webex)
            {
                switch (webex.Status)
                {
                case System.Net.WebExceptionStatus.RequestCanceled:
                case System.Net.WebExceptionStatus.Timeout:
                    return(Promises.Rejected <IHttpResponse>(new HttpTimeoutException(string.Format("A response was not received after waiting for {0:m' minutes, 's' seconds'}", req.Timeout))));

                default:
                    foreach (var kvp in trace)
                    {
                        webex.Data[kvp.Key] = kvp.Value;
                    }
                    trace.Add("exception", webex);
                    return(Promises.Rejected <IHttpResponse>(webex));
                }
            }
            catch (Exception ex)
            {
                foreach (var kvp in trace)
                {
                    ex.Data[kvp.Key] = kvp.Value;
                }
                trace.Add("exception", ex);
                return(Promises.Rejected <IHttpResponse>(ex));
            }
        }
Esempio n. 2
0
 public IPromise <ExplicitHashCredentials> HashCredentials(ICredentials credentials, bool async)
 {
     if (_state != ConnectionState.Normal)
     {
         return(Promises.Rejected <ExplicitHashCredentials>(new ObjectDisposedException("Cannot execute a query because the connection is being disposed (i.e. logged out).")));
     }
     Interlocked.Increment(ref _concurrentQueries);
     return(_conn.HashCredentials(credentials, async)
            .Always(() =>
     {
         var newCount = Interlocked.Decrement(ref _concurrentQueries);
         if (newCount < 1 && _state == ConnectionState.Disposing)
         {
             ExecuteDispose();
         }
     }));
 }
Esempio n. 3
0
 public IPromise <Stream> Process(Command cmd, bool async)
 {
     if (_state != ConnectionState.Normal)
     {
         return(Promises.Rejected <Stream>(new ObjectDisposedException("Cannot execute a query because the connection is being disposed (i.e. logged out).")));
     }
     Interlocked.Increment(ref _concurrentQueries);
     return(_conn.Process(cmd, async)
            .Always(() =>
     {
         var newCount = Interlocked.Decrement(ref _concurrentQueries);
         if (newCount < 1 && _state == ConnectionState.Disposing)
         {
             ExecuteDispose();
         }
     }));
 }