public ActionRequest(Type objectType, string methodName, object criteria, DataPortalContext context)
 {
     // TODO: Complete member initialization
     this.ObjectType = objectType;
     this.MethodName = methodName;
     this.Criteria = criteria;
     this.Context = context;
 }
Exemple #2
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="DataPortalContext" /> object passed to the server.
 /// </param>
 public DataPortalResult Update(object obj, DataPortalContext context)
 {
     var cf = GetChannelFactory();
     var proxy = cf.CreateChannel();
     try
     {
         var request = new UpdateRequest { Object = obj, Context = context };
         var response = proxy.Update(request);
         if (cf != null) cf.Close();
         return ReturnResult(response);
     }
     catch
     {
         cf.Abort();
         throw;
     }
 }
Exemple #3
0
    /// <summary>
    /// Create and initialize an existing business object.
    /// </summary>
    /// <param name="request">The request parameter object.</param>
#pragma warning disable 1998
    public async Task<HttpResponse> Create(CriteriaRequest request)
#pragma warning restore 1998
    {
      var result = new HttpResponse();
      try
      {
        request = ConvertRequest(request);

        // unpack criteria data into object
        object criteria = GetCriteria(request.CriteriaData);
        if (criteria is Csla.DataPortalClient.PrimitiveCriteria)
        {
          criteria = ((Csla.DataPortalClient.PrimitiveCriteria)criteria).Value;
        }

        var objectType = Csla.Reflection.MethodCaller.GetType(AssemblyNameTranslator.GetAssemblyQualifiedName(request.TypeName), true);
        var context = new DataPortalContext(
          (IPrincipal)MobileFormatter.Deserialize(request.Principal),
          true,
          request.ClientCulture,
          request.ClientUICulture,
          (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext),
          (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext));

        var prtl = new Csla.Server.DataPortal();
        var dpr = await prtl.Create(objectType, criteria, context, true);

        if (dpr.Error != null)
          result.ErrorData = new HttpErrorInfo(dpr.Error);
        result.GlobalContext = MobileFormatter.Serialize(dpr.GlobalContext);
        result.ObjectData = MobileFormatter.Serialize(dpr.ReturnObject);
      }
      catch (Exception ex)
      {
        result.ErrorData = new HttpErrorInfo(ex);
        throw;
      }
      finally
      {
        result = ConvertResponse(result);
      }
      return result;
    }
Exemple #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>
        public async virtual Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
        {
            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 = (DataPortalResponse)SerializationFormatterFactory.GetFormatter().Deserialize(serialized);
                response = ConvertResponse(response);
                if (response.ErrorData == null)
                {
                    var newobj = SerializationFormatterFactory.GetFormatter().Deserialize(response.ObjectData);
                    result = new DataPortalResult(newobj, null);
                }
                else if (response.ErrorData != null)
                {
                    var ex = new DataPortalException(response.ErrorData);
                    result = new DataPortalResult(null, ex);
                }
                else
                {
                    throw new DataPortalException("null response", null);
                }
            }
            catch (Exception ex)
            {
                result = new DataPortalResult(null, ex);
            }
            if (result.Error != null)
            {
                throw result.Error;
            }
            return(result);
        }
Exemple #5
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>
        public DataPortalResult Create(Type objectType, object criteria, DataPortalContext context)
        {
            ChannelFactory <IWcfBfPortal> cf = GetChannelFactory();
            IWcfBfPortal svr      = GetProxy(cf);
            WcfResponse  response = null;

            try
            {
                var    formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                byte[] outbound;
                byte[] inbound;
                using (var buffer = new System.IO.MemoryStream())
                {
                    formatter.Serialize(buffer, new CreateRequest(objectType, criteria, context));
                    outbound = buffer.ToArray();
                }

                inbound = svr.Create(outbound);

                using (var buffer = new System.IO.MemoryStream(inbound))
                {
                    response = (WcfResponse)formatter.Deserialize(buffer);
                }
                if (cf != null)
                {
                    cf.Close();
                }
            }
            catch
            {
                cf.Abort();
                throw;
            }
            object result = response.Result;

            if (result is Exception)
            {
                throw (Exception)result;
            }
            return((DataPortalResult)result);
        }
Exemple #6
0
        /// <summary>
        /// Update a business object.
        /// </summary>
        /// <param name="request">The request parameter object.</param>
#pragma warning disable 1998
        public async Task <HttpResponse> Update(UpdateRequest request)
#pragma warning restore 1998
        {
            var result = new HttpResponse();

            try
            {
                request = ConvertRequest(request);
                // unpack object
                object obj = GetCriteria(request.ObjectData);

                var context = new DataPortalContext(
                    (IPrincipal)SerializationFormatterFactory.GetFormatter().Deserialize(request.Principal),
                    true,
                    request.ClientCulture,
                    request.ClientUICulture,
                    (ContextDictionary)SerializationFormatterFactory.GetFormatter().Deserialize(request.ClientContext),
                    (ContextDictionary)SerializationFormatterFactory.GetFormatter().Deserialize(request.GlobalContext));

                var prtl = new Csla.Server.DataPortal();
                var dpr  = await prtl.Update(obj, context, true);

                if (dpr.Error != null)
                {
                    result.ErrorData = new HttpErrorInfo(dpr.Error);
                }

                result.GlobalContext = SerializationFormatterFactory.GetFormatter().Serialize(dpr.GlobalContext);
                result.ObjectData    = SerializationFormatterFactory.GetFormatter().Serialize(dpr.ReturnObject);
            }
            catch (Exception ex)
            {
                result.ErrorData = new HttpErrorInfo(ex);
                throw;
            }
            finally
            {
                result = ConvertResponse(result);
            }
            return(result);
        }
Exemple #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>
 public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
 {
     if (isSync || Csla.ApplicationContext.LogicalExecutionLocation == ApplicationContext.LogicalExecutionLocations.Server)
     {
         return(await _portal.Update(obj, context, isSync));
     }
     else
     {
         if (!FlowSynchronizationContext || SynchronizationContext.Current == null)
         {
             return(await Task.Run(() => this._portal.Update(obj, context, isSync)));
         }
         else
         {
             return(await await Task.Factory.StartNew(() => this._portal.Update(obj, context, isSync),
                                                      CancellationToken.None,
                                                      TaskCreationOptions.None,
                                                      TaskScheduler.FromCurrentSynchronizationContext()));
         }
     }
 }
Exemple #8
0
        public async Task <DataPortalResult> Fetch(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            DataPortalResult result = null;

            for (var i = 0; i < proxies.Count; i += 1)
            {
                try {
                    result = await proxies[i].Fetch(objectType, criteria, context, isSync);
                    break;
                }
                catch (Exception ex) when(ex.Message ==
                                          "This instance has already started one or more requests. Properties can only be modified before sending the first request."
                                          )
                {
                    System.Diagnostics.Debugger.Break();
                }
                catch { }
            }

            return(result ?? throw new Exception("All proxies failed"));
        }
Exemple #9
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 = MobileFormatter.Serialize(obj);
        request = ConvertRequest(request);

        var serialized = MobileFormatter.Serialize(request);

        serialized = await CallDataPortalServer(serialized, "update", GetRoutingToken(obj.GetType()), 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)
        {
          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;
    }
Exemple #10
0
 /// <summary>
 /// Called by <see cref="DataPortal" /> to load an
 /// existing 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="DataPortalContext" /> object passed to the server.</param>
 /// <returns></returns>
 public DataPortalResult Fetch(Type objectType, object criteria, DataPortalContext context)
 {
     var cf = GetChannelFactory();
     var proxy = cf.CreateChannel();
     try
     {
         var request = new FetchRequest
         {
             ObjectType = objectType,
             Criteria = criteria,
             Context = context,
         };
         var response = proxy.Fetch(request);
         if (cf != null) cf.Close();
         return ReturnResult(response);
     }
     catch
     {
         cf.Abort();
         throw;
     }
 }
Exemple #11
0
        /// <summary>
        /// Update a business object.
        /// </summary>
        /// <param name="request">The request parameter object.</param>
#pragma warning disable 1998
        public async Task <DataPortalResponse> Update(UpdateRequest request)
#pragma warning restore 1998
        {
            var result = ApplicationContext.CreateInstanceDI <DataPortalResponse>();

            try
            {
                request = ConvertRequest(request);
                // unpack object
                object obj = GetCriteria(ApplicationContext, request.ObjectData);

                var context = new DataPortalContext(
                    ApplicationContext, (IPrincipal)SerializationFormatterFactory.GetFormatter(ApplicationContext).Deserialize(request.Principal),
                    true,
                    request.ClientCulture,
                    request.ClientUICulture,
                    (ContextDictionary)SerializationFormatterFactory.GetFormatter(ApplicationContext).Deserialize(request.ClientContext));

                var dpr = await dataPortalServer.Update(obj, context, true);

                if (dpr.Error != null)
                {
                    result.ErrorData = ApplicationContext.CreateInstance <DataPortalErrorInfo>(ApplicationContext, dpr.Error);
                }

                result.ObjectData = SerializationFormatterFactory.GetFormatter(ApplicationContext).Serialize(dpr.ReturnObject);
            }
            catch (Exception ex)
            {
                result.ErrorData = ApplicationContext.CreateInstance <DataPortalErrorInfo>(ApplicationContext, ex);
                throw;
            }
            finally
            {
                result = ConvertResponse(result);
            }
            return(result);
        }
Exemple #12
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="DataPortalContext" /> object passed to the server.
        /// </param>
        public DataPortalResult Update(object obj, DataPortalContext context)
        {
            var cf    = GetChannelFactory();
            var proxy = cf.CreateChannel();

            try
            {
                var request = new UpdateRequest {
                    Object = obj, Context = context
                };
                var response = proxy.Update(request);
                if (cf != null)
                {
                    cf.Close();
                }
                return(ReturnResult(response));
            }
            catch
            {
                cf.Abort();
                throw;
            }
        }
Exemple #13
0
        public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
        {
            try
            {
                //if(context.Principal == null)
                //{
                //    var p = new Csla.Security.UnauthenticatedPrincipal();
                //    System.Threading.Thread.CurrentPrincipal = p;
                //}


                _logger.LogInformation("DataPortal_Update for principal: " + context.Principal?.Identity?.Name);

                var result = await DataPortal.Update(obj, context, isSync);

                return(result);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Csla dataportal update error.");
                throw;
            }
        }
Exemple #14
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
        {
            ChannelFactory <IWcfPortal> cf = GetChannelFactory();
            var         proxy    = GetProxy(cf);
            WcfResponse response = null;

            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);
        }
Exemple #15
0
        public DataPortalResult Update(object obj, DataPortalContext context)
        {
            /*********************** 代码块解释 *********************************
             *
             * 由于开发人员平时会使用单机版本开发,而正式部署时,又会选用 C/S 架构。
             * 所以需要保证单机版本和 C/S 架构版本的模式是一样的。也就是说,在单机模式下,
             * 在通过门户访问时,模拟网络版,clone 出一个新的对象。
             * 这样,在底层 Update 更改 obj 时,不会影响上层的实体。
             * 而是以返回值的形式把这个被修改的实体返回给上层。
             *
             * 20120828
             * 但是,当在服务端本地调用时,不需要此模拟功能。
             * 这是因为在服务端本地调用时(例如服务端本地调用 RF.Save),
             * 在开发体验上,数据层和上层使用的实体应该是同一个,数据层的修改应该能够带回到上层,不需要克隆。
             *
             **********************************************************************/

            //ThreadPortalCount == 0 表示第一次进入数据门户
            if (LEnvironment.Location.IsWPFUI && LEnvironment.Location.ConnectDataDirectly &&
                LEnvironment.ThreadPortalCount == 1)
            {
                obj = ObjectCloner.Clone(obj);
            }

            var server = new DataPortalFacade();

            try
            {
                LEnvironment.ThreadPortalCount++;
                return(server.Update(obj, context));
            }
            finally
            {
                LEnvironment.ThreadPortalCount--;
            }
        }
Exemple #16
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;

            SetApplicationContext(criteria, CurrentApplicationContext);
            if (isSync || OriginalApplicationContext.LogicalExecutionLocation == ApplicationContext.LogicalExecutionLocations.Server)
            {
                result = await _portal.Delete(objectType, criteria, context, isSync);
            }
            else
            {
                if (!Options.FlowSynchronizationContext || SynchronizationContext.Current == null)
                {
                    result = await Task.Run(() => this._portal.Delete(objectType, criteria, context, isSync));
                }
                else
                {
                    result = await await Task.Factory.StartNew(() => this._portal.Delete(objectType, criteria, context, isSync),
                                                               CancellationToken.None,
                                                               TaskCreationOptions.None,
                                                               TaskScheduler.FromCurrentSynchronizationContext());
                }
            }
            SetApplicationContext(result.ReturnObject, OriginalApplicationContext);
            SetApplicationContext(result.Error, OriginalApplicationContext);
            return(result);
        }
Exemple #17
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);
        }
 /// <summary>
 /// Create new instance of object.
 /// </summary>
 /// <param name="objectType">Type of business object to create.</param>
 /// <param name="criteria">Criteria object describing business object.</param>
 /// <param name="context">Data portal context from client.</param>
 public DeleteRequest(Type objectType, object criteria, DataPortalContext context)
 {
     _objectType = objectType;
     this.Criteria = criteria;
     _context = context;
 }
Exemple #19
0
 public DataPortalResult Delete(object criteria, DataPortalContext context)
 {
     return(_portal.Delete(criteria, context));
 }
Exemple #20
0
 public DataPortalResult Update(object obj, DataPortalContext context)
 {
     return(_portal.Update(obj, context));
 }
Exemple #21
0
 public DataPortalResult Fetch(object criteria, DataPortalContext context)
 {
     return(_portal.Fetch(criteria, context));
 }
Exemple #22
0
 public DataPortalResult Create(
     Type objectType, object criteria, DataPortalContext context)
 {
     return(_portal.Create(objectType, criteria, context));
 }
Exemple #23
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 override async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            if (isSync)
            {
                throw new NotSupportedException("isSync == true");
            }

            InitializeRabbitMQ();
            return(await base.Delete(objectType, criteria, context, isSync));
        }
        public async Task <DataPortalResult> Create(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            var dp     = new DataPortalSelector();
            var result = await dp.Create(objectType, criteria, context, isSync).ConfigureAwait(false);

            ApplicationContext.GlobalContext["CustomDataPortalServer"] = "Create Called";

            return(result);
        }
Exemple #25
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;

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

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

                serialized = await CallDataPortalServer(serialized, "delete", GetRoutingToken(objectType), 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)
                {
                    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);
        }
Exemple #26
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)
 {
     if (isSync || Csla.ApplicationContext.LogicalExecutionLocation == ApplicationContext.LogicalExecutionLocations.Server)
     {
         return(await _portal.Delete(objectType, criteria, context, isSync));
     }
     else
     {
         var tcs = new TaskCompletionSource <DataPortalResult>();
         var bw  = new Csla.Threading.BackgroundWorker();
         bw.DoWork += (s, o) =>
         {
             o.Result = _portal.Delete(objectType, criteria, context, isSync).Result;
         };
         bw.RunWorkerCompleted += (s, o) =>
         {
             if (o.Error == null)
             {
                 tcs.TrySetResult((DataPortalResult)o.Result);
             }
             else
             {
                 tcs.TrySetException(o.Error);
             }
         };
         bw.RunWorkerAsync();
         return(await tcs.Task);
     }
 }
Exemple #27
0
        public async Task <DataPortalResult> Create(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            // see https://github.com/MarimerLLC/csla/blob/158cede6e12bdb0b6fb738fe8eba50206ccba485/Samples/NET/cs/ExtendableWcfPortalForDotNet/ExtendableWcfPortalForDotNet/Client/WcfProxy.cs
            var svr = await GetProxy(objectType);

            var response = await svr.Create(objectType, criteria, context, isSync);

            if (response.Error != null)
            {
                throw response.Error;
            }

            return(response);
        }
Exemple #28
0
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            DataPortalResult result = null;

            for (var i = 0; i < proxies.Count; i += 1)
            {
                try {
                    result = await proxies[i].Delete(objectType, criteria, context, isSync);
                    break;
                }
                catch { }
            }

            return(result ?? throw new Exception("All proxies failed"));
        }
Exemple #29
0
 public virtual DataPortalResult Delete(object criteria, DataPortalContext context)
 {
     Server.DataPortal portal = new Server.DataPortal();
     return(portal.Delete(criteria, context));
 }
Exemple #30
0
    /// <summary>
    /// Update a business object.
    /// </summary>
    /// <param name="request">The request parameter object.</param>
#pragma warning disable 1998
    public async Task<HttpResponse> Update(UpdateRequest request)
#pragma warning restore 1998
    {
      var result = new HttpResponse();
      try
      {
        request = ConvertRequest(request);
        // unpack object
        object obj = GetCriteria(request.ObjectData);

        var context = new DataPortalContext(
          (IPrincipal)MobileFormatter.Deserialize(request.Principal),
          true,
          request.ClientCulture,
          request.ClientUICulture,
          (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext),
          (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext));

        var prtl = new Csla.Server.DataPortal();
        var dpr = await prtl.Update(obj, context, true);

        if (dpr.Error != null)
          result.ErrorData = new HttpErrorInfo(dpr.Error);

        result.GlobalContext = MobileFormatter.Serialize(dpr.GlobalContext);
        result.ObjectData = MobileFormatter.Serialize(dpr.ReturnObject);
      }
      catch (Exception ex)
      {
        result.ErrorData = new HttpErrorInfo(ex);
      }
      return ConvertResponse(result);
    }
Exemple #31
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 Task <DataPortalResult> Create(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            DataPortalResult result = null;

            try
            {
                if (isSync)
                {
                    throw new NotSupportedException("isSync == true");
                }
                var client  = GetClient();
                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(client, serialized, "create", GetRoutingToken(objectType));

                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)
                {
                    var 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);
        }
Exemple #32
0
 /// <summary>
 /// Update a business object.
 /// </summary>
 /// <param name="obj">Business object to update.</param>
 /// <param name="context">
 /// <see cref="Server.DataPortalContext" /> object passed to the server.
 /// </param>
 public DataPortalResult Update(object obj, DataPortalContext context)
 {
     Server.DataPortal portal = new DataPortal();
       return portal.Update(obj, context, true).Result;
 }
Exemple #33
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);
        }
Exemple #34
0
 public Task <DataPortalResult> Delete(object criteria, DataPortalContext context, bool isSync)
 {
     throw new NotImplementedException();
 }
Exemple #35
0
        public async Task <DataPortalResult> Delete(Type objectType, object criteria, DataPortalContext context, bool isSync)
        {
            var svr = await GetProxy(objectType);

            var response = await svr.Delete(objectType, criteria, context, isSync);

            if (response.Error != null)
            {
                throw response.Error;
            }

            return(response);
        }
Exemple #36
0
 public Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)
 {
     throw new NotImplementedException();
 }
Exemple #37
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
        }
Exemple #38
0
 /// <summary>
 /// Get an existing business object.
 /// </summary>
 /// <param name="objectType">Type of business object to retrieve.</param>
 /// <param name="criteria">Criteria object describing business object.</param>
 /// <param name="context">
 /// <see cref="Server.DataPortalContext" /> object passed to the server.
 /// </param>
 public DataPortalResult Fetch(Type objectType, object criteria, DataPortalContext context)
 {
     Server.DataPortal portal = new DataPortal();
       return portal.Fetch(objectType, criteria, context, true).Result;
 }