微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WCF xmldocument parameter

WCF xmldocument parameter

 

前段时间,遇到一个问题,就是XmlDocument作为参数在WCF Service的使用问题. 众所周知,WCF 中只直接对 XMLElement支持.当时我就觉得有些不可思议.因为在之前的WebService都是直接支持XmlDocument作为参数的.难道另有隐情,微软觉得直接以XmlDocument传递不好,或是难以实现.带着这些疑问在网上找了一些资料,最终结合自己的思考.得出了如下的解决方案.红色字体是要注意的地方。

 

一.WCF Server

 

1.Interface的实现

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Xml;

namespace WSL.ATOMSG.Member2ATMService
{

    [ServiceContract]
    [XmlSerializerFormat]
    public interface IService
    {

        [OperationContract]
        string SendXml(XmlDocument xmlDoc);

    } 

}

 

2.Service的实现

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Xml;
using System.Configuration;
using WSL.ATOMSG.PL.Common;
using WSL.ATOMSG.Common;

namespace WSL.ATOMSG.Member2ATMService
{

    public class Service : IService
    {

        public string SendXml(XmlDocument xmlDoc)
        {
            try
            {
                string member2atmExchange = ConfigurationManager.AppSettings["Member2ATMExchange"];
                string member2atmQueue = ConfigurationManager.AppSettings["Member2ATMQueue"];
                RabbitMQ.RabbitmqWrapper wrapper = new WSL.ATOMSG.RabbitMQ.RabbitmqWrapper();
                wrapper.PublishMessage(member2atmExchange,member2atmQueue,"test",xmlDoc.InnerXml);
                return member2atmExchange + member2atmQueue + xmlDoc.InnerXml;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

    }
}

二.WCF Client

1.Client的实现

 

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using WSL.ATOMSG.PL.Common;


namespace WSL.ATOMSG.Member2ATMClient
{
    public partial class ClientForm : Form
    {
        public ClientForm()
        {
            InitializeComponent();
        }

 

        private void btnSendXml_Click(object sender,EventArgs e)
        {
            Member2ATMRef.ServiceClient client = new WSL.ATOMSG.Member2ATMClient.Member2ATMRef.ServiceClient();

            string xml = txtMessageContent.Text;
            xml = xml.Replace("/r","");
            xml = xml.Replace("/n","");
           this.GetSendingMessage(this.cboRequestorDN.Text.Trim(),this.cboResponderDN.Text.Trim(),txtServiceCode.Text.Trim(),Guid.NewGuid(),cboMessageType.Text.Trim(),txtReference.Text.Trim(),xml);

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xml);

            string result = client.SendXml(xmlDoc.DocumentElement);
            txtInfomation.Text = result;
        }


        private XmlDocument GetSendingMessage(string requestorDN,string responderDN,string serviceCode,Guid msgid,string msgType,string msgRef,string swiftXml)
        {
            XmlDocument xmlDoc = new XmlDocument();
            string errorMessage = string.Empty;

            try
            {
                string msgTypeProject = MessageDetailHelper.GetMsgTypeProject(msgType);
                string prefix = string.Empty;
                if (msgTypeProject != "")
                {
                    prefix = msgTypeProject.Substring(0,msgTypeProject.IndexOf("."));
                }
                else
                {
                    msgTypeProject = "setr.010.001.03";
                    prefix = "setr";
                }
                string wcfIP = "192.168.1.237";

                xmlDoc.LoadXml(string.Format(@"<?xml version='1.0'?>
                                    <ns1:SendMsgRequest xmlns:ns1='http://www.wealthcraft.com/ATOMS/SNFG/1.0/Schemas/{0}/{1}'>
                                     <RequestorIP xmlns=''>{2}</RequestorIP>
                                     <RequestorDN xmlns=''>{3}</RequestorDN>
                                     <ResponderDN xmlns=''>{4}</ResponderDN>
                                     <ServiceCode xmlns=''>{5}</ServiceCode>
                                        <MessageId xmlns=''>{6}</MessageId>
                                     <MsgFormat xmlns=''>XML</MsgFormat>
                                     <MsgType xmlns=''>{7}</MsgType>
                                     <MsgRef xmlns=''>{8}</MsgRef>
                                     <DupRef xmlns=''/>
                                     <MsgBody xmlns=''>{9}</MsgBody>
                                    </ns1:SendMsgRequest>",
                                         prefix,msgTypeProject,wcfIP,requestorDN,responderDN,
                                         serviceCode,msgid,msgType,msgRef,swiftXml));
            }
            catch (Exception ex)
            {
                errorMessage = ex.Message;
            }

            return xmlDoc;        }    }}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐