public void WorkReceive(object state) { WcfReceiveResult result = new WcfReceiveResult(); // Create the surrogate XmlSerializerSurrogate surrogate = new XmlSerializerSurrogate(Formatter); try { // Parse the object result.MessageIdentifier = MessageId; result.MessageVersion = (state as Message).Version; result.Structure = (state as Message).GetBody <IGraphable>(surrogate); result.Headers = (state as Message).Headers; result.Details = surrogate.Details; result.Code = ResultCode.Accepted; if (result.Details.FirstOrDefault(o => o.Type == ResultDetailType.Error) != null) { result.Code = ResultCode.AcceptedNonConformant; } else if (result.Structure == null) { result.Code = ResultCode.TypeNotAvailable; } } catch (MessageValidationException e) { result.Code = ResultCode.Rejected; List <IResultDetail> dtl = new List <IResultDetail>(new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }); dtl.AddRange(surrogate.Details ?? new IResultDetail[0]); result.Details = dtl.ToArray(); } catch (FormatException e) { result.Code = ResultCode.Rejected; result.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } catch (Exception e) { result.Code = ResultCode.Error; result.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } // Set the result this.ReceiveResult = result; // Fire completed event if (Completed != null) { Completed(this); } }
public void WorkReceive(object state) { WcfReceiveResult result = new WcfReceiveResult(); // Create the surrogate XmlSerializerSurrogate surrogate = new XmlSerializerSurrogate(Formatter); try { // Parse the object result.MessageIdentifier = MessageId; result.MessageVersion = (state as Message).Version; result.Structure = (state as Message).GetBody<IGraphable>(surrogate); result.Headers = (state as Message).Headers; result.Details = surrogate.Details; result.Code = ResultCode.Accepted; if (result.Details.FirstOrDefault(o => o.Type == ResultDetailType.Error) != null) result.Code = ResultCode.AcceptedNonConformant; else if (result.Structure == null) result.Code = ResultCode.TypeNotAvailable; } catch (MessageValidationException e) { result.Code = ResultCode.Rejected; List<IResultDetail> dtl = new List<IResultDetail>(new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }); dtl.AddRange(surrogate.Details ?? new IResultDetail[0]); result.Details = dtl.ToArray(); } catch (FormatException e) { result.Code = ResultCode.Rejected; result.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } catch (Exception e) { result.Code = ResultCode.Error; result.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } // Set the result this.ReceiveResult = result; // Fire completed event if (Completed != null) Completed(this); }
public void WorkSend(object state) { // Prepare stream SendResult = new WcfSendResult(); IGraphable data = null; ReceiveResult = new WcfReceiveResult(); try { data = (IGraphable)state; } catch { } // Prepare the serializer surrogate XmlSerializerSurrogate surrogate = new XmlSerializerSurrogate(Formatter); try { if (data == null) throw new MessageValidationException("Invalid message structure passed to the connector", data); // Graph the object string soapAction = ""; #if WINDOWS_PHONE SendResult.Message = Message.CreateMessage(MessageVersion, Actions != null && Actions.TryGetValue(state.GetType(), out soapAction) ? soapAction : "none", data, surrogate); #else SendResult.Message = Message.CreateMessage(MessageVersion, WcfConfiguration != null && WcfConfiguration.Actions.TryGetValue(state.GetType().FullName, out soapAction) ? soapAction : "none", data, surrogate); #endif if(CustomHeaders != null) SendResult.Message.Headers.CopyHeadersFrom(CustomHeaders); // Validate #if !WINDOWS_PHONE var graphResult = this.Formatter.Graph(new MemoryStream(), data); SendResult.Code = graphResult.Code; SendResult.Details = graphResult.Details; // Did the operation fail? if (graphResult.Code != ResultCode.Accepted && graphResult.Code != ResultCode.AcceptedNonConformant) { if (InvalidMessage != null) { MessageEventArgs me = new MessageEventArgs(SendResult.Code, surrogate.Details); InvalidMessage(this, me); if (me.Alternate != null) { SendResult.Message = Message.CreateMessage(MessageVersion, soapAction, me.Alternate, surrogate); graphResult = this.Formatter.Graph(new MemoryStream(), data); SendResult.Code = graphResult.Code; SendResult.Details = graphResult.Details; } } else { SendResult.Details = graphResult.Details; SendResult.Message = null; } } #endif } catch (MessageValidationException e) { SendResult.Code = ResultCode.Rejected; List<IResultDetail> dtl = new List<IResultDetail>(new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }); dtl.AddRange(surrogate.Details ?? new IResultDetail[0]); SendResult.Details = dtl.ToArray(); } catch (FormatException e) { SendResult.Code = ResultCode.Rejected; SendResult.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } catch (Exception e) { SendResult.Code = ResultCode.Error; SendResult.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } finally { } // Fire completed event if (Completed != null) Completed(this); }
public void WorkSend(object state) { // Prepare stream SendResult = new WcfSendResult(); IGraphable data = null; ReceiveResult = new WcfReceiveResult(); try { data = (IGraphable)state; } catch { } // Prepare the serializer surrogate XmlSerializerSurrogate surrogate = new XmlSerializerSurrogate(Formatter); try { if (data == null) { throw new MessageValidationException("Invalid message structure passed to the connector", data); } // Graph the object string soapAction = ""; #if WINDOWS_PHONE SendResult.Message = Message.CreateMessage(MessageVersion, Actions != null && Actions.TryGetValue(state.GetType(), out soapAction) ? soapAction : "none", data, surrogate); #else SendResult.Message = Message.CreateMessage(MessageVersion, WcfConfiguration != null && WcfConfiguration.Actions.TryGetValue(state.GetType().FullName, out soapAction) ? soapAction : "none", data, surrogate); #endif if (CustomHeaders != null) { SendResult.Message.Headers.CopyHeadersFrom(CustomHeaders); } // Validate #if !WINDOWS_PHONE var graphResult = this.Formatter.Graph(new MemoryStream(), data); SendResult.Code = graphResult.Code; SendResult.Details = graphResult.Details; // Did the operation fail? if (graphResult.Code != ResultCode.Accepted && graphResult.Code != ResultCode.AcceptedNonConformant) { if (InvalidMessage != null) { MessageEventArgs me = new MessageEventArgs(SendResult.Code, surrogate.Details); InvalidMessage(this, me); if (me.Alternate != null) { SendResult.Message = Message.CreateMessage(MessageVersion, soapAction, me.Alternate, surrogate); graphResult = this.Formatter.Graph(new MemoryStream(), data); SendResult.Code = graphResult.Code; SendResult.Details = graphResult.Details; } } else { SendResult.Details = graphResult.Details; SendResult.Message = null; } } #endif } catch (MessageValidationException e) { SendResult.Code = ResultCode.Rejected; List <IResultDetail> dtl = new List <IResultDetail>(new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }); dtl.AddRange(surrogate.Details ?? new IResultDetail[0]); SendResult.Details = dtl.ToArray(); } catch (FormatException e) { SendResult.Code = ResultCode.Rejected; SendResult.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } catch (Exception e) { SendResult.Code = ResultCode.Error; SendResult.Details = new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, e) }; } finally { } // Fire completed event if (Completed != null) { Completed(this); } }