加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WCF xmldocument parameter

发布时间:2020-12-17 02:10:14 所属栏目:安全 来源:网络整理
导读:WCF xmldocument parameter ? 前段时间,遇到一个问题,就是XmlDocument作为参数在WCF Service的使用问题. 众所周知,WCF 中只直接对 XMLElement支持.当时我就觉得有些不可思议.因为在之前的WebService都是直接支持XmlDocument作为参数的.难道另有隐情,微软觉得

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;??????? }??? }}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读