/// <summary> /// Process the incoming request and forms a formatted outgoing response. /// </summary> /// <param name="incomingRequest">Incoming request</param> /// <returns>Message instance containing the outgoing response</returns> public Message ProcessRequest(Request incomingRequest) { _baseUri = _serviceHost.ServiceBaseUri; _responseSerializationFormat = incomingRequest.ResponseSerializationFormat; _incomingEntities = incomingRequest.EntityList; _idToTempIdMapping = incomingRequest.IdToTempIdMapping; // Check and invoke request interceptor this.PrepareAndProcessRequestInterceptor(); IAsymmetricProviderService providerService = new SqlSyncProviderService(_configuration, Convert.ToString(incomingRequest.CommandParams[CommandParamType.ScopeName]), incomingRequest.ProviderParams, base._operationContext); // Set a callback for the ApplyClientChangeFailed delegate. ((SqlSyncProviderService)providerService).ApplyClientChangeFailed = ClientChangeFailedToApply; // Loop over client input and pull all inserts to a different collection. _incomingNewInsertEntities = _incomingEntities.Where(e => string.IsNullOrEmpty(e.ServiceMetadata.Id)).ToList(); _applyChangesResponse = providerService.ApplyChanges(incomingRequest.SyncBlob, incomingRequest.EntityList); if (_applyChangesResponse.Errors.Count > 0) { throw new Exception(_applyChangesResponse.Errors[0].Description); } // Give the inserts permanent Ids AssignRealIdsForClientInserts(_incomingNewInsertEntities); // Process the rejected entities if any this.ProcessRejectedEntities((SqlSyncProviderService)providerService); // Check and fire response interceptor this.PrepareAndProcessResponseInterceptor(providerService); var oDataWriter = GetSyncWriterWithContents(); return(base.CreateResponseMessage(incomingRequest.ResponseSerializationFormat, oDataWriter)); }
/// <summary> /// Process the incoming request and forms a formatted outgoing response. /// </summary> /// <param name="incomingRequest">Incoming request</param> /// <returns>Message instance containing the outgoing response</returns> public Message ProcessRequest(Request incomingRequest) { _baseUri = _serviceHost.ServiceBaseUri; _responseSerializationFormat = incomingRequest.ResponseSerializationFormat; _incomingEntities = incomingRequest.EntityList; _idToTempIdMapping = incomingRequest.IdToTempIdMapping; // Check and invoke request interceptor this.PrepareAndProcessRequestInterceptor(); IAsymmetricProviderService providerService = new SqlSyncProviderService(_configuration, Convert.ToString(incomingRequest.CommandParams[CommandParamType.ScopeName]), incomingRequest.ProviderParams, base._operationContext); // Set a callback for the ApplyClientChangeFailed delegate. ((SqlSyncProviderService)providerService).ApplyClientChangeFailed = ClientChangeFailedToApply; // Loop over client input and pull all inserts to a different collection. _incomingNewInsertEntities = _incomingEntities.Where(e => string.IsNullOrEmpty(e.ServiceMetadata.Id)).ToList(); _applyChangesResponse = providerService.ApplyChanges(incomingRequest.SyncBlob, incomingRequest.EntityList); // Give the inserts permanent Ids AssignRealIdsForClientInserts(_incomingNewInsertEntities); // Process the rejected entities if any this.ProcessRejectedEntities((SqlSyncProviderService)providerService); // Check and fire response interceptor this.PrepareAndProcessResponseInterceptor(providerService); var oDataWriter = GetSyncWriterWithContents(); return base.CreateResponseMessage(incomingRequest.ResponseSerializationFormat, oDataWriter); }