public Message ProcessMessage(Message request) { try { string req = SoapMessageHelper.DumpWCFMessage(request); if (req == null || req.Length < 1) { return(null); } string rsp = null; if (!_server.NotifyMessageReceived(req, out rsp) || string.IsNullOrEmpty(rsp)) { _server._log.Write("Preparing SOAP error message from file: " + _server._soapErrFile); rsp = _server._soapErrEnvelope; } Message msg = SoapMessageHelper.CreateWCFMessageWithEnvelope( SoapEnvelopeVersion.Soap11, WSAddressingVersion.None, "*", rsp); return(msg); } catch (Exception e) { _server._log.Write(e); return(null); } }
/// <summary> /// Deserializes X-Road message response or throws <see>XRoadFaultException</see> when /// X-Road fault is parsed from the message instead of expected result value. /// </summary> public static object DeserializeMessageContent(this XRoadMessage message, IServiceMap serviceMap) { if (serviceMap.ResponseValueDefinition.ContainsNonTechnicalFault) { ThrowIfXRoadFault(message, serviceMap); } message.ContentStream.Position = 0; using (var reader = XmlReader.Create(message.ContentStream)) { reader.MoveToBody(); if (!reader.MoveToElement(2)) { throw XRoadException.InvalidQuery("No payload element in SOAP message."); } if (reader.NamespaceURI == NamespaceConstants.SOAP_ENV && reader.LocalName == "Fault") { throw new SoapFaultException(SoapMessageHelper.DeserializeSoapFault(reader)); } var result = serviceMap.DeserializeResponse(reader, message); var fault = result as XRoadFault; if (fault != null) { throw new XRoadFaultException(fault); } return(result); } }
public bool SendMessage(string uri, string action, string requestSOAPEnvelope, out string responseSOAPEnvelope) { bool res = false; responseSOAPEnvelope = null; if (action == null) { return(res); } if (uri == null || uri.Length < 1) { return(res); } if (requestSOAPEnvelope == null || requestSOAPEnvelope.Length < 1) { return(res); } string soapInfo = string.Format("sending SOAP message to uri: {0} with action: {1}", uri, action); _log.Write("Begin " + soapInfo); try { //using (ChannelFactory<IAbstractClientContract> factory = new ChannelFactory<IAbstractClientContract>("ABSTRACT_CLIENT_ENDPOINT")) using (ConfigurableChannelFactory <IAbstractClientContract> factory = new ConfigurableChannelFactory <IAbstractClientContract>(_configFile)) { IAbstractClientContract proxy = factory.CreateChannel(new EndpointAddress(uri)); using (proxy as IDisposable) { using (OperationContextScope sc = new OperationContextScope(proxy as IContextChannel)) { using (Message wcfRequest = SoapMessageHelper.CreateEmptyWCFMessage( SoapEnvelopeVersion.Soap11, WSAddressingVersion.None, action)) { OperationContext.Current.OutgoingMessageProperties.Add(SwaEncoderConstants.SoapEnvelopeProperty, requestSOAPEnvelope); using (Message wcfResponse = proxy.SendMessage(wcfRequest)) { responseSOAPEnvelope = SoapMessageHelper.DumpWCFMessage(wcfResponse); res = true; } } } } } } catch (Exception err) { if (_log != null) { _log.Write(err); } res = false; } _log.Write(string.Format("End {0}. Result: {1}", soapInfo, res)); return(res); }
private void buttonMsgCall_Click(object sender, EventArgs e) { string uri = this.textBoxMsgURI.Text.Trim(); string action = this.textBoxMsgAction.Text.Trim(); string request = this.textBoxMsgSnd.Text.Trim(); System.ServiceModel.Channels.Message wcfRequest = null; System.ServiceModel.Channels.Message wcfResponse = null; try { ChannelFactory <IAbstractContract> factory = new ChannelFactory <IAbstractContract>("ABSTRACT_CLIENT_ENDPOINT"); IAbstractContract proxy = factory.CreateChannel(new EndpointAddress(uri)); using (proxy as IDisposable) { using (OperationContextScope sc = new OperationContextScope(proxy as IContextChannel)) { using (wcfRequest = SoapMessageHelper.CreateEmptyWCFMessage( SoapEnvelopeVersion.Soap11, WSAddressingVersion.None, action)) { //List<SwaAttachment> attachmentList = new List<SwaAttachment>(); //OperationContext.Current.OutgoingMessageProperties.Add(SwaEncoderConstants.AttachmentProperty, attachmentList); OperationContext.Current.OutgoingMessageProperties.Add(SwaEncoderConstants.SoapEnvelopeProperty, request); wcfResponse = proxy.SendMessage(wcfRequest); } } } if (wcfResponse != null) { string response = SoapMessageHelper.DumpWCFMessage(wcfResponse); wcfResponse.Close(); this.textBoxMsgRcv.Text = response; } } catch (Exception err) { MessageBox.Show(this, err.ToString(), this.Text); } }
public Message ProcessMessage(Message request) { string req = SoapMessageHelper.DumpWCFMessage(request); _server.DisplayRequestMessage(req); //Message msg = SoapMessageHelper.CreateEmptyWCFMessage( // SoapEnvelopeVersion.Soap11, // WSAddressingVersion.None, // "SomeReplyAction"); string response = _server._response; Message msg = SoapMessageHelper.CreateWCFMessageWithEnvelope( SoapEnvelopeVersion.Soap11, WSAddressingVersion.None, "*", response); return(msg); }
public Message ProcessMessage(Message request) { try { string req = SoapMessageHelper.DumpWCFMessage(request); if (req == null || req.Length < 1) { return(null); } SOAPReceiverSession session = new SOAPReceiverSession(req, _receiver._enableSessionStatusLog); _receiver._log.Write("Begin processing " + session.ToString()); string rsp = ""; if (_receiver.NotifyMessageReceived(session)) { rsp = session.OutgoingSOAPEnvelope; } else { _receiver._log.Write("Preparing SOAP error message from file: " + _receiver._cfg.GetSOAPErrorMessageFileFullPath()); rsp = _receiver._cfg.GetSOAPErrorMessageContent(); } Message msg = SoapMessageHelper.CreateWCFMessageWithEnvelope( SoapEnvelopeVersion.Soap11, WSAddressingVersion.None, "*", rsp); if (_receiver._enableSessionStatusLog) { _receiver._log.Write("Session status history: " + session.GetStatusLog()); } _receiver._log.Write("End processing " + session.ToString()); _receiver._log.Write(""); return(msg); } catch (Exception e) { _receiver._log.Write(e); return(null); } }
/// <summary> /// Handle exception that occured while handling X-Road message service request. /// </summary> public virtual void HandleException(HttpContext context, Exception exception, FaultCode faultCode, string faultString, string faultActor, string details) { using (var writer = XmlWriter.Create(new StreamWriter(context.Response.Body, XRoadEncoding.UTF8))) SoapMessageHelper.SerializeSoapFaultResponse(writer, faultCode, faultString, faultActor, details, exception); }
/// <summary> /// Handles all exceptions as technical SOAP faults. /// </summary> protected virtual void OnExceptionOccured(XRoadContextClassic context, Exception exception, FaultCode faultCode, string faultString, string faultActor, string details) { using (var writer = new XmlTextWriter(context.HttpContext.Response.OutputStream, encoding)) SoapMessageHelper.SerializeSoapFaultResponse(writer, faultCode, faultString, faultActor, details, exception); }