| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Description
- {
- using System.Collections.Generic;
- using System.ServiceModel.Channels;
- using System.ServiceModel;
- using System.Xml;
- using System.Runtime.Serialization;
- using System.Diagnostics;
- using System.Net.Security;
- using System.ServiceModel.Security;
- using System.ComponentModel;
- [DebuggerDisplay("Action={action}, Direction={direction}, MessageType={messageType}")]
- public class MessageDescription
- {
- static Type typeOfUntypedMessage;
- string action;
- MessageDirection direction;
- MessageDescriptionItems items;
- XmlName messageName;
- Type messageType;
- XmlQualifiedName xsdType;
- ProtectionLevel protectionLevel;
- bool hasProtectionLevel;
- public MessageDescription(string action, MessageDirection direction) : this(action, direction, null) { }
- internal MessageDescription(string action, MessageDirection direction, MessageDescriptionItems items)
- {
- if (!MessageDirectionHelper.IsDefined(direction))
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("direction"));
- this.action = action;
- this.direction = direction;
- this.items = items;
- }
- internal MessageDescription(MessageDescription other)
- {
- this.action = other.action;
- this.direction = other.direction;
- this.Items.Body = other.Items.Body.Clone();
- foreach (MessageHeaderDescription mhd in other.Items.Headers)
- {
- this.Items.Headers.Add(mhd.Clone() as MessageHeaderDescription);
- }
- foreach (MessagePropertyDescription mpd in other.Items.Properties)
- {
- this.Items.Properties.Add(mpd.Clone() as MessagePropertyDescription);
- }
- this.MessageName = other.MessageName;
- this.MessageType = other.MessageType;
- this.XsdTypeName = other.XsdTypeName;
- this.hasProtectionLevel = other.hasProtectionLevel;
- this.ProtectionLevel = other.ProtectionLevel;
- }
- internal MessageDescription Clone()
- {
- return new MessageDescription(this);
- }
- public string Action
- {
- get { return action; }
- internal set { action = value; }
- }
-
- public MessageBodyDescription Body
- {
- get { return Items.Body; }
- }
- public MessageDirection Direction
- {
- get { return direction; }
- }
- public MessageHeaderDescriptionCollection Headers
- {
- get { return Items.Headers; }
- }
- public MessagePropertyDescriptionCollection Properties
- {
- get { return Items.Properties; }
- }
- internal MessageDescriptionItems Items
- {
- get
- {
- if (items == null)
- items = new MessageDescriptionItems();
- return items;
- }
- }
- public ProtectionLevel ProtectionLevel
- {
- get { return this.protectionLevel; }
- set
- {
- if (!ProtectionLevelHelper.IsDefined(value))
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
- this.protectionLevel = value;
- this.hasProtectionLevel = true;
- }
- }
- public bool ShouldSerializeProtectionLevel()
- {
- return this.HasProtectionLevel;
- }
- public bool HasProtectionLevel
- {
- get { return this.hasProtectionLevel; }
- }
- internal static Type TypeOfUntypedMessage
- {
- get
- {
- if (typeOfUntypedMessage == null)
- {
- typeOfUntypedMessage = typeof(Message);
- }
- return typeOfUntypedMessage;
- }
- }
-
- internal XmlName MessageName
- {
- get { return messageName; }
- set { messageName = value; }
- }
- // Not serializable on purpose, metadata import/export cannot
- // produce it, only available when binding to runtime
- [DefaultValue(null)]
- public Type MessageType
- {
- get { return messageType; }
- set { messageType = value; }
- }
- internal bool IsTypedMessage
- {
- get
- {
- return messageType != null;
- }
- }
- internal bool IsUntypedMessage
- {
- get
- {
- return (Body.ReturnValue != null && Body.Parts.Count == 0 && Body.ReturnValue.Type == TypeOfUntypedMessage) ||
- (Body.ReturnValue == null && Body.Parts.Count == 1 && Body.Parts[0].Type == TypeOfUntypedMessage);
- }
- }
- internal bool IsVoid
- {
- get
- {
- return !IsTypedMessage && Body.Parts.Count == 0 && (Body.ReturnValue == null || Body.ReturnValue.Type == typeof(void));
- }
- }
- internal XmlQualifiedName XsdTypeName
- {
- get { return xsdType; }
- set { xsdType = value; }
- }
- internal void ResetProtectionLevel()
- {
- this.protectionLevel = ProtectionLevel.None;
- this.hasProtectionLevel = false;
- }
- }
- internal class MessageDescriptionItems
- {
- MessageHeaderDescriptionCollection headers;
- MessageBodyDescription body;
- MessagePropertyDescriptionCollection properties;
- internal MessageBodyDescription Body
- {
- get
- {
- if (body == null)
- body = new MessageBodyDescription();
- return body;
- }
- set
- {
- this.body = value;
- }
- }
- internal MessageHeaderDescriptionCollection Headers
- {
- get
- {
- if (headers == null)
- headers = new MessageHeaderDescriptionCollection();
- return headers;
- }
- }
- internal MessagePropertyDescriptionCollection Properties
- {
- get
- {
- if (properties == null)
- properties = new MessagePropertyDescriptionCollection();
- return properties;
- }
- }
- }
- }
|