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; }
/// <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; } }
/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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())); } } }
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")); }
/// <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; }
/// <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; } }
/// <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); }
/// <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; } }
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; } }
/// <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); }
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--; } }
/// <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); }
/// <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; }
public DataPortalResult Delete(object criteria, DataPortalContext context) { return(_portal.Delete(criteria, context)); }
public DataPortalResult Update(object obj, DataPortalContext context) { return(_portal.Update(obj, context)); }
public DataPortalResult Fetch(object criteria, DataPortalContext context) { return(_portal.Fetch(criteria, context)); }
public DataPortalResult Create( Type objectType, object criteria, DataPortalContext context) { return(_portal.Create(objectType, criteria, context)); }
/// <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); }
/// <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); }
/// <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); } }
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); }
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")); }
public virtual DataPortalResult Delete(object criteria, DataPortalContext context) { Server.DataPortal portal = new Server.DataPortal(); return(portal.Delete(criteria, context)); }
/// <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); }
/// <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); }
/// <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; }
/// <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); }
public Task <DataPortalResult> Delete(object criteria, DataPortalContext context, bool isSync) { throw new NotImplementedException(); }
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); }
public Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync) { throw new NotImplementedException(); }
/// <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 }
/// <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; }