private void wcf_ClientUpdateIssuesCompleted(IAsyncResult ar) { Exception ex = new Exception("Async update completed normally", null); try { WCF.UpdateIssuesResponse rs = ((WCF.IssuesContractClient)ar.AsyncState).EndUpdateIssues(ar); } catch (Exception x) { ex = new Exception(x.Message, x.InnerException); } PrepareDataAfterUpdate(); ClientUpdateIssuesCompleted(this, new AsyncCompletedEventArgs(ex, false, null)); }
/// <summary> /// Client callable code to Delete/Insert/Update Issues /// </summary> /// <returns>True if update is successful. If False, check for RowErrors.</returns> public bool ClientUpdateIssues(bool async) { PrepareDataBeforeUpdate(); IssuesCD updatedIssues = new IssuesCD(); updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.Deleted), false, MissingSchemaAction.Ignore); updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.Added), false, MissingSchemaAction.Ignore); updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.ModifiedCurrent), false, MissingSchemaAction.Ignore); if (updatedIssues.Issues.Rows.Count > 0) { if (UseWcfService) { try { WCF.IssuesContractClient svWCF = new WCF.IssuesContractClient(); WCF.UpdateIssuesRequest rqWCF = new WCF.UpdateIssuesRequest(); rqWCF.IssuesCD = new IssuesServiceWCF.IssuesCD(); rqWCF.IssuesCD.Merge(updatedIssues, false, MissingSchemaAction.Ignore); if (async) { string ping = svWCF.Ping(); if (String.IsNullOrEmpty(ping)) { throw new Exception("WCF is offline."); } svWCF.BeginUpdateIssues(rqWCF, wcf_ClientUpdateIssuesCompleted, svWCF); return(true); } else { WCF.UpdateIssuesResponse rsWCF = svWCF.UpdateIssues(rqWCF); Merge(rsWCF.IssuesCD, false, MissingSchemaAction.Ignore); PrepareDataAfterUpdate(); return(true); } } catch { UseWcfService = false; } // ignore if not responding } if (UseAsmxService) { try { ASMX.IssuesServiceASMX svASMX = new ASMX.IssuesServiceASMX(); ASMX.UpdateIssuesRequest rqASMX = new ASMX.UpdateIssuesRequest(); rqASMX.IssuesCD = new IssuesServiceASMX.IssuesCD(); rqASMX.IssuesCD.Merge(updatedIssues, false, MissingSchemaAction.Ignore); if (async) { svASMX.UpdateIssuesCompleted += asmx_ClientUpdateIssuesCompleted; svASMX.UpdateIssuesAsync(rqASMX); return(true); } else { ASMX.UpdateIssuesResponse rsASMX = svASMX.UpdateIssues(rqASMX); Merge(rsASMX.IssuesCD, false, MissingSchemaAction.Ignore); PrepareDataAfterUpdate(); return(true); } } catch { UseAsmxService = false; } // ignore if not responding } if (UseClientServer) { try { Merge(UpdateIssues(updatedIssues), false, MissingSchemaAction.Ignore); PrepareDataAfterUpdate(); return(true); } catch { UseClientServer = false; } // ignore if not responding } } return(false); }