Ejemplo n.º 1
0
        /// <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);
        }