WCF技术内幕 第5章 (6)

使用BodyWriter把数据放进Message

CreateMessage其中一种重载方法允许调用者使用System.ServiceModel.Channels.BodyWriter把数据推送到Message里。

using System;
using System.IO;
using System.ServiceModel.Channels;
using System.Text;
using System.Xml;
 
namespace XMLDictionaryWriter
{
    class Program : BodyWriter
    {
        private string m_fileName;
 
        internal Program(string fileName)
            : base(true)
        {
            this.m_fileName = fileName;
        }
 
        static void Main()
        {
            Message message1 = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:SomeAction", new Program("XMLFile1.xml"));
            Console.WriteLine(message1.ToString());
            Console.ReadKey();
            //<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
            //  <s:Header>
            //    <a:Action s:mustUnderstand="1">urn:SomeAction</a:Action>
            //  </s:Header>
            //  <s:Body>
            //  <AndersProfix:Person Name="Mike" Year="3" xmlns:AndersProfix="AndersNameSpace" />
            //</s:Body>
            //</s:Envelope>
            File.WriteAllText(@"c:\file2.txt", message1.ToString());
        }
 
        protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
        {
            using (FileStream stream = File.Open(m_fileName, FileMode.Open))
            {
                XmlDictionaryReader xdr = XmlDictionaryReader.CreateTextReader(
                    stream, 
                    Encoding.UTF8, 
                    XmlDictionaryReaderQuotas.Max, 
                    null);
 
                xdr.ReadStartElement();
                while (xdr.NodeType != XmlNodeType.EndElement)
                    writer.WriteNode(xdr, true);
            }
        }
    }
}

xmlfile1.xml:

<?xml version="1.0" encoding="utf-8"?>
<AndersProfix:AndersName xmlns:AndersProfix="AndersNameSpace">
  <AndersProfix:Person Name="Mike" Year="3" />
</AndersProfix:AndersName>


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值