예제 #1
0
 public TableDataServiceBase(TableProtocolHead tableProtocolHead, IAccountIdentifier identifier, IUtilityTableDataContextFactory factory, bool operationIsConditional, Dictionary <string, string> continuationToken, RequestStartedCallback requestStartedCallback, CheckPermissionDelegate checkPermissionCallback, QueryRowCommandPropertiesAvailableCallback queryRowCommandPropertiesAvailableCallback, ContinuationTokenAvailableCallback continuationTokenAvailableCallback)
 {
     if (factory == null)
     {
         throw new ArgumentNullException("factory");
     }
     if (tableProtocolHead == null)
     {
         throw new ArgumentNullException("tableProtocolHead");
     }
     this.dataSource            = factory.CreateDataContext(identifier, tableProtocolHead.ServiceOperationContext.AccountName, tableProtocolHead.RequestRestVersion);
     this.dataSource.ApiVersion = tableProtocolHead.RequestRestVersion;
     this.dataSource.OldMetricsTableNamesDeprecated = tableProtocolHead.IsRequestVersionAtLeast("2013-08-15");
     this.dataSource.IsBatchRequest          = tableProtocolHead.IsBatchRequest();
     this.dataSource.OperationIsConditional  = operationIsConditional;
     this.dataSource.ContinuationToken       = continuationToken;
     this.dataSource.RequestStartedCallback  = requestStartedCallback;
     this.dataSource.CheckPermissionCallback = checkPermissionCallback;
     this.dataSource.QueryRowCommandPropertiesAvailableCallback = queryRowCommandPropertiesAvailableCallback;
     this.dataSource.ContinuationTokenAvailableCallback         = continuationTokenAvailableCallback;
     this.tableProtocolHead = tableProtocolHead;
     if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2016-05-31") >= 0)
     {
         this.dataSource.Timeout = tableProtocolHead.operationContext.RemainingTimeout();
     }
 }
예제 #2
0
        protected override void HandleException(HandleExceptionArgs args)
        {
            Exception exception          = args.Exception;
            IStringDataEventStream error = Logger <IRestProtocolHeadLogger> .Instance.Error;

            object[] logString = new object[] { exception.GetLogString() };
            error.Log("TableDataServiceHost.ProcessException. Rethrowing exception: {0}", logString);
            exception = this.tableProtocolHead.TransformExceptionInternal(exception);
            if (exception is ArgumentOutOfRangeException)
            {
                exception = new TableServiceArgumentOutOfRangeException(exception.Message, exception);
            }
            else if (exception is ArgumentException)
            {
                exception = new TableServiceArgumentException(exception.Message, exception);
            }
            else if (exception is OverflowException)
            {
                exception = new TableServiceOverflowException(exception.Message, exception);
            }
            else if (exception is UriFormatException)
            {
                exception = new TableServiceArgumentException(exception.Message, exception);
            }
            NephosErrorDetails       errorDetailsForException = this.tableProtocolHead.GetErrorDetailsForException(exception);
            string                   userSafeErrorMessage     = errorDetailsForException.UserSafeErrorMessage;
            IUtilityTableDataContext currentDataSource        = (IUtilityTableDataContext)this.dataSource.CurrentDataSource;

            if (this.tableProtocolHead.IsBatchRequest() && currentDataSource.FailedCommandIndex >= 0)
            {
                CultureInfo invariantCulture   = CultureInfo.InvariantCulture;
                object[]    failedCommandIndex = new object[] { currentDataSource.FailedCommandIndex, userSafeErrorMessage };
                userSafeErrorMessage = string.Format(invariantCulture, "{0}:{1}", failedCommandIndex);
            }
            args.Exception = new DataServiceException((int)errorDetailsForException.StatusEntry.StatusCodeHttp, errorDetailsForException.StatusEntry.StatusId, userSafeErrorMessage, null, args.Exception);
            this.tableProtocolHead.OnErrorInAstoriaProcessing(errorDetailsForException);
        }