示例#1
0
        public virtual string GetResponse( CouchUri uri, string method, string body )
        {
            var request = WebRequest.Create( uri.ToString() );
            request.Method = method;
            request.Timeout = configuration.TimeOut;
            //request.PreAuthenticate = configuration.Preauthorize;

            if ( !string.IsNullOrEmpty( body ) )
            {
                var bytes = Encoding.UTF8.GetBytes( body );
                request.ContentType = "application/json; charset=utf-8";
                request.ContentLength = bytes.Length;

                var writer = request.GetRequestStream();
                writer.Write( bytes, 0, bytes.Length );
                writer.Close();
            }

            var result = "";
            var response = request.GetResponse();

            using( var reader = new StreamReader( response.GetResponseStream() ) )
            {
                result = reader.ReadToEnd();
                response.Close();
            }

            return result;
        }
示例#2
0
        public virtual Tuple<string, byte[]> GetAttachment(CouchUri uri)
        {
            var request = WebRequest.Create(uri.ToString());
            request.Method = "GET";
            request.Timeout = _configuration.TimeOut;

            var response = request.GetResponse();
            int bytesRead = 0;
            var memoryStream = new MemoryStream();
            
            using(var stream = response.GetResponseStream())
            {
                stream.CopyTo(memoryStream);
            }
            memoryStream.Position = 0;
            var result =
                Tuple.Create(
                    response.ContentType, 
                    memoryStream.ToArray()
                    );

            response.Close();

            return result;
        }
示例#3
0
 public static ReplicationCommand Once(CouchUri source, CouchUri target)
 {
     return new ReplicationCommand()
                {
                    SourceUri = source.ToString(),
                    TargetUri = target.ToString(),
                    CreateTarget = true
                };
 }
 // This constructor overload exists strictly for deserializing the couch request container
 // when one is deep-copied when a WHERE clause hits an OR keyword, thus branching the query
 // into multiple requests.
 protected CouchRequestContainer(SerializationInfo info, StreamingContext context)
 {
     Transformer = info.GetValue("Transformer", typeof (IKeyTransformer)) as IKeyTransformer;
     var tmpUri = new Uri(info.GetString("CouchUri"));
     var localPath = tmpUri.LocalPath.Split(new string[] {"/"}, StringSplitOptions.RemoveEmptyEntries);
     var database = localPath[0];
     var designDoc = localPath[2];
     var view = localPath[4];
     Uri = new CouchUri(tmpUri.Scheme, tmpUri.Host, tmpUri.Port, database);
     Uri.Design(designDoc);
     Uri.View(view);
     StartKeys = info.GetValue("StartKeys", typeof (Dictionary<string, object>)) as Dictionary<string, object>;
     EndKeys = info.GetValue("EndKeys", typeof(Dictionary<string, object>)) as Dictionary<string, object>;
     IsRange = info.GetBoolean("IsRange");
     HasWhere = info.GetBoolean("HasWhere");
 }
示例#5
0
 public void CopyDatabase <TModel>(CouchUri targetUri)
 {
     try
     {
         CreateUri().Replicate();
         var sourceUri = configuration.NewUri <TModel>();
         var request   = ReplicationCommand.Once(sourceUri, targetUri);
         var body      = request.ToJson(false);
         Post(body);
     }
     catch (WebException ex)
     {
         //do nothing, it's a timeout
         if (!ex.Message.Contains("timed out"))
         {
             throw;
         }
     }
 }
示例#6
0
 public bool DatabaseExists(string database)
 {
     try
     {
         Uri = new CouchUri(configuration.Protocol, configuration.Server, configuration.Port, database);
         var response = action.Get(Uri);
         return(!string.IsNullOrEmpty(response) && !response.StartsWith("{\"error\""));
     }
     catch (Exception ex)
     {
         throw Exception(
                   ex,
                   "An exception occurred checking for the existence of database {0} at {1}. \r\n\t {2}",
                   database,
                   Uri,
                   ex
                   );
     }
 }
示例#7
0
        public virtual CouchUri NewUri(string database)
        {
            var uri = configuration.Preauthorize
                          ? CouchUri.Build(
                configuration.User,
                configuration.Password,
                configuration.Protocol,
                configuration.Server,
                configuration.Port,
                database)
                          : CouchUri.Build(
                configuration.Protocol,
                configuration.Server,
                configuration.Port,
                database);

            EnsureDatabaseExists(database);
            return(uri);
        }
示例#8
0
        public virtual void GetContinuousResponse( CouchUri uri, int since, Action<string, ChangeRecord> callback )
        {
            var baseUri = uri.Clone() as CouchUri;
            uri = uri.Changes( Feed.Continuous, since );
            var request = WebRequest.Create( uri.ToString() );
            request.Method = "GET";
            request.Timeout = int.MaxValue;
            request.PreAuthenticate = configuration.Preauthorize;
            var result = "";
            _pollForChanges = true;

            try
            {
                var response = request.GetResponse();

                using( var reader = new StreamReader( response.GetResponseStream() ) )
                {
                    while ( _pollForChanges )
                    {
                        result = reader.ReadLine();
                        if ( !string.IsNullOrEmpty( result ) )
                        {
                            var changeUri = baseUri.Clone() as CouchUri;
                            var change = result.FromJson<ChangeRecord>();
                            change.Document = GetResponse( changeUri.Id( change.Id ), "GET", "" );
                            callback.BeginInvoke( uri.DatabaseName, change, null, null );
                        }
                    }
                }
            }
            catch ( Exception ex )
            {
                "An exception occurred while receiving the change stream from {0}. \r\n\t {1}"
                    .ToError<IDocumentRepository>( uri.ToString(), ex );
                throw;
            }
            finally
            {
                callback = null;
            }
        }
示例#9
0
 public ViewQuery(CouchUri uri)
 {
     _uri = uri;
 }
 protected static CouchUri GetMockUri( CouchUri actualUri )
 {
     return Moq.It.Is<CouchUri>(u => u.ToString().Equals(actualUri.ToString()));
 }
示例#11
0
 public virtual string Delete( CouchUri uri )
 {
     return GetResponse( uri, "DELETE", "" );
 }
示例#12
0
 public virtual string Get( CouchUri uri )
 {
     return GetResponse( uri, "GET", "" );
 }
示例#13
0
 public virtual string Put( CouchUri uri, string body )
 {
     return GetResponse( uri, "PUT", body );
 }
示例#14
0
 protected static CouchUri GetMockUri(CouchUri actualUri)
 {
     return(Moq.It.Is <CouchUri>(u => u.ToString().Equals(actualUri.ToString())));
 }
示例#15
0
        public void CopyDatabase(CouchUri sourceUri, CouchUri targetUri)
        {
            var command = commandFactory.CreateServerCommand();

            command.CopyDatabase(sourceUri, targetUri);
        }
示例#16
0
        public void Replicate(CouchUri sourceUri, CouchUri targetUri)
        {
            var command = commandFactory.CreateServerCommand();

            command.Replicate(sourceUri, targetUri);
        }
示例#17
0
 public virtual CouchUri BuildCouchUri()
 {
     var uri = new CouchUri(_uri.Scheme,_uri.Host, _uri.Port, _uri.AbsolutePath.TrimStart('/'));
     return uri;
 }
示例#18
0
        public void CopyDatabase <TModel>(CouchUri targetUri)
        {
            var command = commandFactory.CreateServerCommand();

            command.CopyDatabase <TModel>(targetUri);
        }
示例#19
0
 public virtual string SaveAttachment( CouchUri uri, string type, byte[] content )
 {
     using( var client = new WebClient() )
     {
         client.Headers.Add( "Content-Type", type );
         var bytes = client.UploadData( uri.ToString(), "PUT", content );
         return Encoding.UTF8.GetString( bytes );
     }
 }
示例#20
0
        public void Replicate <TModel>(CouchUri targetUri)
        {
            var command = commandFactory.CreateServerCommand();

            command.Replicate <TModel>(targetUri);
        }
示例#21
0
 public virtual string Put( CouchUri uri )
 {
     return GetResponse( uri, "PUT", "" );
 }