Example #1
0
        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);
            }
        }
Example #2
0
        /// <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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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);
            }
        }
Example #7
0
 /// <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);
 }
Example #8
0
 /// <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);
 }