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(); } }
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); }