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; }
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; }
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"); }
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; } } }
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 ); } }
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); }
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; } }
public ViewQuery(CouchUri uri) { _uri = uri; }
protected static CouchUri GetMockUri( CouchUri actualUri ) { return Moq.It.Is<CouchUri>(u => u.ToString().Equals(actualUri.ToString())); }
public virtual string Delete( CouchUri uri ) { return GetResponse( uri, "DELETE", "" ); }
public virtual string Get( CouchUri uri ) { return GetResponse( uri, "GET", "" ); }
public virtual string Put( CouchUri uri, string body ) { return GetResponse( uri, "PUT", body ); }
protected static CouchUri GetMockUri(CouchUri actualUri) { return(Moq.It.Is <CouchUri>(u => u.ToString().Equals(actualUri.ToString()))); }
public void CopyDatabase(CouchUri sourceUri, CouchUri targetUri) { var command = commandFactory.CreateServerCommand(); command.CopyDatabase(sourceUri, targetUri); }
public void Replicate(CouchUri sourceUri, CouchUri targetUri) { var command = commandFactory.CreateServerCommand(); command.Replicate(sourceUri, targetUri); }
public virtual CouchUri BuildCouchUri() { var uri = new CouchUri(_uri.Scheme,_uri.Host, _uri.Port, _uri.AbsolutePath.TrimStart('/')); return uri; }
public void CopyDatabase <TModel>(CouchUri targetUri) { var command = commandFactory.CreateServerCommand(); command.CopyDatabase <TModel>(targetUri); }
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 ); } }
public void Replicate <TModel>(CouchUri targetUri) { var command = commandFactory.CreateServerCommand(); command.Replicate <TModel>(targetUri); }
public virtual string Put( CouchUri uri ) { return GetResponse( uri, "PUT", "" ); }