コード例 #1
0
		public RemoteBulkInsertOperation(BulkInsertOptions options, ServerClient client)
		{
			this.client = client;
			items = new BlockingCollection<RavenJObject>(options.BatchSize*8);
			string requestUrl = "/bulkInsert?";
			if (options.CheckForUpdates)
				requestUrl += "checkForUpdates=true";
			if (options.CheckReferencesInIndexes)
				requestUrl += "&checkReferencesInIndexes=true";

			// this will force the HTTP layer to authenticate, meaning that our next request won't have to
			HttpJsonRequest req = client.CreateRequest("POST", requestUrl + "&no-op=for-auth-only",
			                                           disableRequestCompression: true);
			req.ExecuteRequest();


			httpJsonRequest = client.CreateRequest("POST", requestUrl, disableRequestCompression: true);
			// the request may take a long time to process, so we need to set a large timeout value
			httpJsonRequest.Timeout = TimeSpan.FromHours(6); 
			nextTask = httpJsonRequest.GetRawRequestStream()
			                          .ContinueWith(task =>
			                          {
				                          Stream requestStream = task.Result;
				                          while (true)
				                          {
					                          var batch = new List<RavenJObject>();
					                          RavenJObject item;
					                          while (items.TryTake(out item, 200))
					                          {
						                          if (item == null) // marker
						                          {
							                          FlushBatch(requestStream, batch);
							                          return;
						                          }
						                          batch.Add(item);
						                          if (batch.Count >= options.BatchSize)
							                          break;
					                          }
					                          FlushBatch(requestStream, batch);
				                          }
			                          });
		}
コード例 #2
0
        public RemoteBulkInsertOperation(BulkInsertOptions options, ServerClient client)
        {
            this.options = options;
            this.client  = client;
            items        = new BlockingCollection <RavenJObject>(options.BatchSize * 8);
            string requestUrl = "/bulkInsert?";

            if (options.CheckForUpdates)
            {
                requestUrl += "checkForUpdates=true";
            }
            if (options.CheckReferencesInIndexes)
            {
                requestUrl += "&checkReferencesInIndexes=true";
            }

            var expect100Continue = client.Expect100Continue();

            // this will force the HTTP layer to authenticate, meaning that our next request won't have to
            HttpJsonRequest req = client.CreateRequest("POST", requestUrl + "&no-op=for-auth-only",
                                                       disableRequestCompression: true);

            req.PrepareForLongRequest();
            req.ExecuteRequest();


            httpJsonRequest = client.CreateRequest("POST", requestUrl, disableRequestCompression: true);
            // the request may take a long time to process, so we need to set a large timeout value
            httpJsonRequest.PrepareForLongRequest();
            nextTask = httpJsonRequest.GetRawRequestStream()
                       .ContinueWith(task =>
            {
                try
                {
                    expect100Continue.Dispose();
                }
                catch (Exception)
                {
                }
                WriteQueueToServer(task);
            });
        }
コード例 #3
0
		public RemoteBulkInsertOperation(BulkInsertOptions options, ServerClient client)
		{
			this.options = options;
			this.client = client;
			items = new BlockingCollection<RavenJObject>(options.BatchSize*8);
			string requestUrl = "/bulkInsert?";
			if (options.CheckForUpdates)
				requestUrl += "checkForUpdates=true";
			if (options.CheckReferencesInIndexes)
				requestUrl += "&checkReferencesInIndexes=true";

			var expect100Continue = client.Expect100Continue();

			// this will force the HTTP layer to authenticate, meaning that our next request won't have to
			HttpJsonRequest req = client.CreateRequest("POST", requestUrl + "&op=generate-single-use-auth-token",
														disableRequestCompression: true);
			var token = req.ReadResponseJson();


			httpJsonRequest = client.CreateRequest("POST", requestUrl, disableRequestCompression: true);
			// the request may take a long time to process, so we need to set a large timeout value
			httpJsonRequest.PrepareForLongRequest();
			httpJsonRequest.AddOperationHeader("Single-Use-Auth-Token", token.Value<string>("Token"));
			nextTask = httpJsonRequest.GetRawRequestStream()
			                          .ContinueWith(task =>
			                          {
				                          try
				                          {
					                          expect100Continue.Dispose();
				                          }
				                          catch (Exception)
				                          {
				                          }
										  WriteQueueToServer(task);
			                          });
		}
コード例 #4
0
            private Task <RavenJToken> GetAuthToken(string operationUrl)
            {
#if !SILVERLIGHT
                var request = operationClient.CreateRequest("POST", operationUrl + "&op=generate-single-use-auth-token",
                                                            disableRequestCompression: true);

                return(new CompletedTask <RavenJToken>(request.ReadResponseJson()));
#else
                var request = operationClient.CreateRequest(operationUrl + "&op=generate-single-use-auth-token", "POST",
                                                            disableRequestCompression: true);
                request.webRequest.ContentLength = 0;

                return(request.ReadResponseJsonAsync());
#endif
            }
コード例 #5
0
        private Task <RavenJToken> GetAuthToken()
        {
#if !SILVERLIGHT
            var request = operationClient.CreateRequest("GET", "/singleAuthToken",
                                                        disableRequestCompression: true);

            return(new CompletedTask <RavenJToken>(request.ReadResponseJson()));
#else
            var request = operationClient.CreateRequest("/singleAuthToken", "GET",
                                                        disableRequestCompression: true);
            request.webRequest.ContentLength = 0;

            return(request.ReadResponseJsonAsync());
#endif
        }