5.8 Message状态
Message通过State属性管理Message对象上方法调用的顺序。
using System; namespace System.ServiceModel.Channels { // Summary: // Specifies the status of a message. public enum MessageState { // Summary: // The message has been created. Created = 0, // // Summary: // The message is being read. Read = 1, // // Summary: // The message has been written. Written = 2, // // Summary: // The message has been copied. Copied = 3, // // Summary: // The message has been closed and can no longer be accessed. Closed = 4, } }
5.9 使用消息头
Message类型是一个SOAP消息的CLR抽象。MessageHeader是对SOAP消息头块的泛型CLR抽象,MessageHeaders是一组MessageHeader对象;EndpointAddress是对WS-Addressing endpoint规范的CLR抽象。
MessageHeader类型
string WSAddNS="http://www.w3.org/2005/08/addressing"; MessageHeader messageHeader = MessageHeader.CreateHeader("MessageID", WSAddNS,Guid.NewGuid().ToString()); Console.WriteLine(messageHeader.ToString()); //<MessageID xmlns="http://www.w3.org/2005/08/addressing">a0a8d44e-881c-49b3-88d6-73b970e18413</MessageID>
MessageHeader类型定义了几个序列化和编码MessageHeader对象状态的成员。
using System; using System.IO; using System.ServiceModel.Channels; using System.Text; using System.Xml; namespace Andersoft { class Program { static void Main(string[] args) { PurchaseOrderInfo purchaseOrderInfo = new PurchaseOrderInfo(1000, DateTime.UtcNow, 10.92d); string WSAddNS="http://www.andersoft.com/messageheader"; MessageHeader messageHeader = MessageHeader.CreateHeader("MessageID", WSAddNS, purchaseOrderInfo); Stream stream = new MemoryStream(); XmlDictionaryWriter writer=XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8); messageHeader.WriteHeader(writer, MessageVersion.Soap12WSAddressingAugust2004); writer.Flush(); stream.Position = 0; Console.WriteLine(messageHeader.ToString()); System.IO.File.WriteAllText(@"C:\file.txt", messageHeader.ToString()); Console.ReadKey(); //<MessageID xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.andersoft.com/messageheader"> // <Amount xmlns="http://schemas.datacontract.org/2004/07/Andersoft">10.92</Amount> // <IssueDate xmlns="http://schemas.datacontract.org/2004/07/Andersoft">2013-02-25T09:49:23.7747372Z</IssueDate> // <PONumber xmlns="http://schemas.datacontract.org/2004/07/Andersoft">1000</PONumber> //</MessageID> } } [Serializable] public sealed class PurchaseOrderInfo { int PONumber; DateTime? IssueDate; Double? Amount; public PurchaseOrderInfo(int poNumber, DateTime? issueDate, Double? amount) { PONumber = poNumber; IssueDate = issueDate; Amount = amount; } } }