Esempio n. 1
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to delete a
        /// business object.
        /// </summary>
        /// <param name="objectType">Type of business object to create.</param>
        /// <param name="criteria">Criteria object describing business object.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            DataPortalResult result;

            try
            {
                var request = GetBaseCriteriaRequest();
                request.TypeName = AssemblyNameTranslator.GetAssemblyQualifiedName(objectType.AssemblyQualifiedName);
                if (!(criteria is IMobileObject))
                {
                    criteria = new PrimitiveCriteria(criteria);
                }
                request.CriteriaData = MobileFormatter.Serialize(criteria);
                request = ConvertRequest(request);

                var serialized = MobileFormatter.Serialize(request);

                serialized = await CallDataPortalServer(serialized, "delete", GetRoutingToken(objectType), isSync);

                var response = (Csla.Server.Hosts.HttpChannel.HttpResponse)MobileFormatter.Deserialize(serialized);
                response = ConvertResponse(response);
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    result = new DataPortalResult(null, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to delete a
        /// business object.
        /// </summary>
        /// <param name="objectType">Type of business object to create.</param>
        /// <param name="criteria">Criteria object describing business object.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
            var request = GetBaseCriteriaRequest();

            request.TypeName = objectType.AssemblyQualifiedName;
            if (!(criteria is IMobileObject))
            {
                criteria = new PrimitiveCriteria(criteria);
            }
            request.CriteriaData = MobileFormatter.Serialize(criteria);
            request = ConvertRequest(request);

            var proxy = GetProxy();
            DataPortalResult result = null;

            try
            {
                var response = await proxy.DeleteAsync(request);

                response = ConvertResponse(response);
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    result = new DataPortalResult(null, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to create a
        /// new business object.
        /// </summary>
        /// <param name="objectType">Type of business object to create.</param>
        /// <param name="criteria">Criteria object describing business object.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
        public async virtual Task <DataPortalResult> Create(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            DataPortalResult result;

            try
            {
                var request = GetBaseCriteriaRequest();
                request.TypeName = AssemblyNameTranslator.GetAssemblyQualifiedName(objectType.AssemblyQualifiedName);
                if (criteria is not IMobileObject)
                {
                    criteria = new PrimitiveCriteria(criteria);
                }
                request.CriteriaData = SerializationFormatterFactory.GetFormatter(ApplicationContext).Serialize(criteria);
                request = ConvertRequest(request);
                var serialized = SerializationFormatterFactory.GetFormatter(ApplicationContext).Serialize(request);
                serialized = await CallDataPortalServer(serialized, "create", GetRoutingToken(objectType), isSync);

                var response = (DataPortalResponse)SerializationFormatterFactory.GetFormatter(ApplicationContext).Deserialize(serialized);
                response = ConvertResponse(response);

                if (response.ErrorData == null)
                {
                    var obj = SerializationFormatterFactory.GetFormatter(ApplicationContext).Deserialize(response.ObjectData);
                    result = new DataPortalResult(ApplicationContext, obj, null);
                }
                else if (response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(ApplicationContext, null, ex);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(ApplicationContext, null, ex);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to update a
        /// business object.
        /// </summary>
        /// <param name="obj">The business object to update.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
            DataPortalResult result;

            try
            {
                var request = GetBaseUpdateCriteriaRequest();
                request.ObjectData = SerializationFormatterFactory.GetFormatter().Serialize(obj);
                request            = ConvertRequest(request);

                var serialized = SerializationFormatterFactory.GetFormatter().Serialize(request);

                serialized = await CallDataPortalServer(serialized, "update", GetRoutingToken(obj.GetType()), isSync);

                var response = (Csla.Server.Hosts.HttpChannel.HttpResponse)SerializationFormatterFactory.GetFormatter().Deserialize(serialized);
                response = ConvertResponse(response);
                var globalContext = (ContextDictionary)SerializationFormatterFactory.GetFormatter().Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    var newobj = SerializationFormatterFactory.GetFormatter().Deserialize(response.ObjectData);
                    result = new DataPortalResult(newobj, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
 private void EvaluateDataPortalException(DataPortalException dataPortalException)
 {
     if (IsDataPortalExceptionOfType <ConcurrencyException>(dataPortalException))
     {
         throw new ConcurrencyException("Concurrent access", dataPortalException);
     }
     if (IsDataPortalExceptionOfType <InvalidStateException>(dataPortalException))
     {
         throw new InvalidStateException("Invalid state", dataPortalException);
     }
     if (IsDataPortalExceptionOfType <NotAllowedException>(dataPortalException))
     {
         throw new NotAllowedException("Not allowed", dataPortalException);
     }
     if (IsDataPortalExceptionOfType <EntityNotFoundException>(dataPortalException))
     {
         throw new EntityNotFoundException("Not found", dataPortalException);
     }
 }
Esempio n. 6
0
        /// <summary>
        /// Called by the client-side DataPortal to update a
        /// business object.
        /// </summary>
        /// <param name="obj">Business object to update.</param>
        /// <param name="context">Server.DataPortalContext object passed to the server.</param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
        public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
        {
            DataPortalResult result = null;

            if (isSync)
            {
                throw new NotSupportedException("isSync == true");
            }
            try
            {
                var contextData = Csla.Serialization.Mobile.MobileFormatter.Serialize(context);
                var objectData  = Csla.Serialization.Mobile.MobileFormatter.Serialize(obj);
                var portal      = new BrokeredHost();
                var resultData  = await portal.Update(objectData, contextData);

                var response      = (Csla.Server.Hosts.HttpChannel.HttpResponse)Csla.Serialization.Mobile.MobileFormatter.Deserialize(resultData.ToArray());
                var globalContext = (Csla.Core.ContextDictionary)Csla.Serialization.Mobile.MobileFormatter.Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    obj    = MobileFormatter.Deserialize(response.ObjectData);
                    result = new DataPortalResult(obj, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 7
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to update a
        /// business object.
        /// </summary>
        /// <param name="obj">The business object to update.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
            var request = GetBaseUpdateCriteriaRequest();

            request.ObjectData = MobileFormatter.Serialize(obj);
            request            = ConvertRequest(request);

            var proxy = GetProxy();
            DataPortalResult result = null;

            try
            {
                var response = await proxy.UpdateAsync(request);

                response = ConvertResponse(response);
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    var newobj = MobileFormatter.Deserialize(response.ObjectData);
                    result = new DataPortalResult(newobj, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 8
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to update a
        /// business object.
        /// </summary>
        /// <param name="obj">The business object to update.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
        public async virtual Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
        {
            DataPortalResult result;

            try
            {
                var request = GetBaseUpdateCriteriaRequest();
                request.ObjectData = SerializationFormatterFactory.GetFormatter(ApplicationContext).Serialize(obj);
                request            = ConvertRequest(request);

                var serialized = SerializationFormatterFactory.GetFormatter(ApplicationContext).Serialize(request);

                serialized = await CallDataPortalServer(serialized, "update", GetRoutingToken(obj.GetType()), isSync);

                var response = (DataPortalResponse)SerializationFormatterFactory.GetFormatter(ApplicationContext).Deserialize(serialized);
                response = ConvertResponse(response);
                if (response.ErrorData == null)
                {
                    var newobj = SerializationFormatterFactory.GetFormatter(ApplicationContext).Deserialize(response.ObjectData);
                    result = new DataPortalResult(ApplicationContext, newobj, null);
                }
                else if (response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(ApplicationContext, null, ex);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(ApplicationContext, null, ex);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 9
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to delete a
        /// business object.
        /// </summary>
        /// <param name="objectType">Type of business object to create.</param>
        /// <param name="criteria">Criteria object describing business object.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
#if !(ANDROID || IOS) && !NETFX_CORE
            ChannelFactory <IWcfPortal> cf = GetChannelFactory();
            var         proxy    = GetProxy(cf);
            WcfResponse response = null;
#if NET40
            try
            {
                var request = new DeleteRequest(objectType, criteria, context);
                if (isSync)
                {
                    response = proxy.Delete(request);
                }
                else
                {
                    var worker = new Csla.Threading.BackgroundWorker();
                    var tcs    = new TaskCompletionSource <WcfResponse>();
                    worker.RunWorkerCompleted += (o, e) =>
                    {
                        tcs.SetResult((WcfResponse)e.Result);
                    };
                    worker.DoWork += (o, e) =>
                    {
                        e.Result = proxy.Delete(request);
                    };
                    worker.RunWorkerAsync();
                    response = await tcs.Task;
                }
                if (cf != null)
                {
                    cf.Close();
                }
                object result = response.Result;
                if (result is Exception)
                {
                    throw (Exception)result;
                }
                return((DataPortalResult)result);
            }
            catch
            {
                cf.Abort();
                throw;
            }
#else
            try
            {
                var request = new DeleteRequest(objectType, criteria, context);
                if (isSync)
                {
                    response = proxy.Delete(request);
                }
                else
                {
                    response = await proxy.DeleteAsync(request);
                }
                if (cf != null)
                {
                    cf.Close();
                }
            }
            catch
            {
                cf.Abort();
                throw;
            }
            object result = response.Result;
            if (result is Exception)
            {
                throw (Exception)result;
            }
            return((DataPortalResult)result);
#endif
#else
            var request = GetBaseCriteriaRequest();
            request.TypeName = objectType.AssemblyQualifiedName;
            if (!(criteria is IMobileObject))
            {
                criteria = new PrimitiveCriteria(criteria);
            }
            request.CriteriaData = MobileFormatter.Serialize(criteria);
            request = ConvertRequest(request);

            var proxy = GetProxy();
            DataPortalResult result = null;
#if !NETFX_CORE && !(IOS || ANDROID)
            var tcs = new TaskCompletionSource <DataPortalResult>();
            proxy.DeleteCompleted += (s, e) =>
            {
                try
                {
                    Csla.WcfPortal.WcfResponse response = null;
                    if (e.Error == null)
                    {
                        response = ConvertResponse(e.Result);
                    }
                    ContextDictionary globalContext = null;
                    if (response != null)
                    {
                        globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                    }
                    if (e.Error == null && response != null && response.ErrorData == null)
                    {
                        result = new DataPortalResult(null, null, globalContext);
                    }
                    else if (response != null && response.ErrorData != null)
                    {
                        var ex = new DataPortalException(response.ErrorData);
                        result = new DataPortalResult(null, ex, globalContext);
                    }
                    else
                    {
                        result = new DataPortalResult(null, e.Error, globalContext);
                    }
                }
                catch (Exception ex)
                {
                    result = new DataPortalResult(null, ex, null);
                }
                finally
                {
                    tcs.SetResult(result);
                }
            };
            proxy.DeleteAsync(request);
            var finalresult = await tcs.Task;
            if (finalresult.Error != null)
            {
                throw finalresult.Error;
            }
            return(finalresult);
#else
            try
            {
                var response = await proxy.DeleteAsync(request);

                response = ConvertResponse(response);
                if (response == null)
                {
                    throw new DataPortalException("null response", null);
                }
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response.ErrorData == null)
                {
                    result = new DataPortalResult(null, null, globalContext);
                }
                else
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
#endif
#endif
        }
Esempio n. 10
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to delete a
        /// business object.
        /// </summary>
        /// <param name="objectType">Type of business object to create.</param>
        /// <param name="criteria">Criteria object describing business object.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
            var request = GetBaseCriteriaRequest();

            request.TypeName = objectType.AssemblyQualifiedName;
            if (!(criteria is IMobileObject))
            {
                criteria = new PrimitiveCriteria(criteria);
            }
            request.CriteriaData = MobileFormatter.Serialize(criteria);
            request = ConvertRequest(request);

            var proxy = GetProxy();
            DataPortalResult result = null;

            try
            {
                Csla.WcfPortal.WcfResponse response = null;
                if (isSync)
                {
                    response = proxy.Delete(request);
                }
                else
                {
#if !NET40
                    response = await proxy.DeleteAsync(request).ConfigureAwait(false);
#else
                    var tcs = new TaskCompletionSource <WcfResponse>();
                    proxy.DeleteCompleted += (o, e) =>
                    {
                        if (e.Error == null)
                        {
                            tcs.TrySetResult(e.Result);
                        }
                        else
                        {
                            tcs.TrySetException(e.Error);
                        }
                    };
                    proxy.DeleteAsync(request);
                    await tcs.Task;
                    response = tcs.Task.Result;
#endif
                }
                response = ConvertResponse(response);
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    result = new DataPortalResult(null, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
 private bool IsDataPortalExceptionOfType <T>(DataPortalException dataPortalException)
 {
     return(dataPortalException.BusinessException is T ||
            dataPortalException.Message.Contains(typeof(T).FullName));
 }
Esempio n. 12
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to delete a
        /// business object.
        /// </summary>
        /// <param name="objectType">Type of business object to create.</param>
        /// <param name="criteria">Criteria object describing business object.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
            DataPortalResult result = null;

            try
            {
                if (isSync)
                {
                    throw new NotSupportedException("isSync == true");
                }
                var client = GetClient();
                if (this.Timeout > 0)
                {
                    client.Timeout = TimeSpan.FromMilliseconds(this.Timeout);
                }
                var request = GetBaseCriteriaRequest();
                request.TypeName = AssemblyNameTranslator.GetAssemblyQualifiedName(objectType.AssemblyQualifiedName);
                if (!(criteria is IMobileObject))
                {
                    criteria = new PrimitiveCriteria(criteria);
                }
                request.CriteriaData = MobileFormatter.Serialize(criteria);
                request = ConvertRequest(request);

                var serialized = MobileFormatter.Serialize(request);

                var httpRequest = new HttpRequestMessage(HttpMethod.Post, string.Format("{0}?operation=delete", DataPortalUrl));
                httpRequest.Content = new ByteArrayContent(serialized);

                var httpResponse = await client.SendAsync(httpRequest);

                httpResponse.EnsureSuccessStatusCode();
                serialized = await httpResponse.Content.ReadAsByteArrayAsync();

                var response = (Csla.Server.Hosts.HttpChannel.HttpResponse)MobileFormatter.Deserialize(serialized);
                response = ConvertResponse(response);
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response != null && response.ErrorData == null)
                {
                    result = new DataPortalResult(null, null, globalContext);
                }
                else if (response != null && response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Esempio n. 13
0
        /// <summary>
        /// Called by <see cref="DataPortal" /> to update a
        /// business object.
        /// </summary>
        /// <param name="obj">The business object to update.</param>
        /// <param name="context">
        /// <see cref="Server.DataPortalContext" /> object passed to the server.
        /// </param>
        /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param>
#pragma warning disable 1998
        public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
#pragma warning restore 1998
        {
#if !SILVERLIGHT && !NETFX_CORE
            ChannelFactory <IWcfPortal> cf = GetChannelFactory();
            var         proxy    = GetProxy(cf);
            WcfResponse response = null;
      #if NET40
            try
            {
                var request = new UpdateRequest(obj, context);
                if (isSync)
                {
                    response = proxy.Update(request);
                }
                else
                {
                    var worker = new Csla.Threading.BackgroundWorker();
                    var tcs    = new TaskCompletionSource <WcfResponse>();
                    worker.RunWorkerCompleted += (o, e) =>
                    {
                        tcs.SetResult((WcfResponse)e.Result);
                    };
                    worker.DoWork += (o, e) =>
                    {
                        e.Result = proxy.Update(request);
                    };
                    worker.RunWorkerAsync();
                    response = await tcs.Task;
                }
                if (cf != null)
                {
                    cf.Close();
                }
                object result = response.Result;
                if (result is Exception)
                {
                    throw (Exception)result;
                }
                return((DataPortalResult)result);
            }
            catch
            {
                cf.Abort();
                throw;
            }
#else
            try
            {
                var request = new UpdateRequest(obj, context);
                if (isSync)
                {
                    response = proxy.Update(request);
                }
                else
                {
                    response = await proxy.UpdateAsync(request);
                }
                if (cf != null)
                {
                    cf.Close();
                }
            }
            catch
            {
                cf.Abort();
                throw;
            }
            object result = response.Result;
            if (result is Exception)
            {
                throw (Exception)result;
            }
            return((DataPortalResult)result);
#endif
#else
            var request = GetBaseUpdateCriteriaRequest();
            request.ObjectData = MobileFormatter.Serialize(obj);
            request            = ConvertRequest(request);

            var proxy = GetProxy();
            DataPortalResult result = null;
#if !NETFX_CORE
            var tcs = new TaskCompletionSource <DataPortalResult>();
            proxy.UpdateCompleted += (s, e) =>
            {
                try
                {
                    Csla.WcfPortal.WcfResponse response = null;
                    if (e.Error == null)
                    {
                        response = ConvertResponse(e.Result);
                    }
                    ContextDictionary globalContext = null;
                    if (response != null)
                    {
                        globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                    }
                    if (e.Error == null && response != null && response.ErrorData == null)
                    {
                        var newobj = MobileFormatter.Deserialize(response.ObjectData);
                        result = new DataPortalResult(newobj, null, globalContext);
                    }
                    else if (response != null && response.ErrorData != null)
                    {
                        var ex = new DataPortalException(response.ErrorData);
                        result = new DataPortalResult(null, ex, globalContext);
                    }
                    else
                    {
                        result = new DataPortalResult(null, e.Error, globalContext);
                    }
                }
                catch (Exception ex)
                {
                    result = new DataPortalResult(null, ex, null);
                }
                finally
                {
                    tcs.SetResult(result);
                }
            };
            proxy.UpdateAsync(request);
            var finalresult = await tcs.Task;
            if (finalresult.Error != null)
            {
                throw finalresult.Error;
            }
            return(finalresult);
#else
            try
            {
                var response = await proxy.UpdateAsync(request);

                response = ConvertResponse(response);
                if (response == null)
                {
                    throw new DataPortalException("null response", null);
                }
                var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext);
                if (response.ErrorData == null)
                {
                    var newobj = MobileFormatter.Deserialize(response.ObjectData);
                    result = new DataPortalResult(newobj, null, globalContext);
                }
                else
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex, globalContext);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex, null);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
#endif
#endif
        }