e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
180 lines
7.2 KiB
C#
180 lines
7.2 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="SoapUnknownHeader.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.Services.Protocols {
|
|
using System.Web.Services;
|
|
using System.Xml.Serialization;
|
|
using System;
|
|
using System.Reflection;
|
|
using System.Xml;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using System.ComponentModel;
|
|
|
|
/// <include file='doc\SoapUnknownHeader.uex' path='docs/doc[@for="SoapUnknownHeader"]/*' />
|
|
/// <devdoc>
|
|
/// <para>[To be supplied.]</para>
|
|
/// </devdoc>
|
|
public sealed class SoapUnknownHeader : SoapHeader {
|
|
XmlElement element;
|
|
|
|
/// <include file='doc\SoapUnknownHeader.uex' path='docs/doc[@for="SoapUnknownHeader.Element"]/*' />
|
|
/// <devdoc>
|
|
/// <para>[To be supplied.]</para>
|
|
/// </devdoc>
|
|
[XmlIgnore]
|
|
public XmlElement Element {
|
|
get {
|
|
if (element == null) return null;
|
|
|
|
if (version == SoapProtocolVersion.Soap12) {
|
|
// need to fix up mustUnderstand and actor attributes for soap 1.2
|
|
if (InternalMustUnderstand) {
|
|
element.SetAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace, "1");
|
|
}
|
|
element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace);
|
|
string actor = InternalActor;
|
|
if (actor != null && actor.Length != 0) {
|
|
element.SetAttribute(Soap12.Attribute.Role, Soap12.Namespace, actor);
|
|
}
|
|
element.RemoveAttribute(Soap.Attribute.Actor, Soap.Namespace);
|
|
}
|
|
else if (version == SoapProtocolVersion.Soap11) {
|
|
// need to fix up mustUnderstand and actor attributes for soap 1.1
|
|
// also remove relay attribute since it only applies to soap 1.2
|
|
if (InternalMustUnderstand) {
|
|
element.SetAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace, "1");
|
|
}
|
|
element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace);
|
|
string actor = InternalActor;
|
|
if (actor != null && actor.Length != 0) {
|
|
element.SetAttribute(Soap.Attribute.Actor, Soap.Namespace, actor);
|
|
}
|
|
element.RemoveAttribute(Soap12.Attribute.Role, Soap12.Namespace);
|
|
element.RemoveAttribute(Soap12.Attribute.Relay, Soap12.Namespace);
|
|
}
|
|
|
|
return element;
|
|
}
|
|
set {
|
|
if (value == null && element != null) {
|
|
// save off the mustUnderstand/actor values before they go away
|
|
base.InternalMustUnderstand = InternalMustUnderstand;
|
|
base.InternalActor = InternalActor;
|
|
}
|
|
element = value;
|
|
}
|
|
}
|
|
|
|
internal override bool InternalMustUnderstand {
|
|
get {
|
|
if (element == null) return base.InternalMustUnderstand;
|
|
|
|
string elementMustUnderstand = GetElementAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace, element);
|
|
if (elementMustUnderstand == null) {
|
|
elementMustUnderstand = GetElementAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace, element);
|
|
if (elementMustUnderstand == null)
|
|
return false;
|
|
}
|
|
|
|
switch (elementMustUnderstand) {
|
|
case "false":
|
|
case "0":
|
|
return false;
|
|
case "true":
|
|
case "1":
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
set {
|
|
base.InternalMustUnderstand = value;
|
|
if (element != null) {
|
|
if (value)
|
|
element.SetAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace, "1");
|
|
else
|
|
element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace);
|
|
|
|
element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal override string InternalActor {
|
|
get {
|
|
if (element == null) return base.InternalActor;
|
|
|
|
string elementActor = GetElementAttribute(Soap.Attribute.Actor, Soap.Namespace, element);
|
|
if (elementActor == null) {
|
|
elementActor = GetElementAttribute(Soap12.Attribute.Role, Soap12.Namespace, element);
|
|
if (elementActor == null)
|
|
return "";
|
|
}
|
|
return elementActor;
|
|
}
|
|
set {
|
|
base.InternalActor = value;
|
|
if (element != null) {
|
|
if (value == null || value.Length == 0)
|
|
element.RemoveAttribute(Soap.Attribute.Actor, Soap.Namespace);
|
|
else
|
|
element.SetAttribute(Soap.Attribute.Actor, Soap.Namespace, value);
|
|
|
|
element.RemoveAttribute(Soap12.Attribute.Role, Soap12.Namespace);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal override bool InternalRelay {
|
|
get {
|
|
if (element == null) return base.InternalRelay;
|
|
|
|
string elementRelay = GetElementAttribute(Soap12.Attribute.Relay, Soap12.Namespace, element);
|
|
if (elementRelay == null)
|
|
return false;
|
|
|
|
switch (elementRelay) {
|
|
case "false":
|
|
case "0":
|
|
return false;
|
|
case "true":
|
|
case "1":
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
set {
|
|
base.InternalRelay = value;
|
|
if (element != null) {
|
|
if (value)
|
|
element.SetAttribute(Soap12.Attribute.Relay, Soap12.Namespace, "1");
|
|
else
|
|
element.RemoveAttribute(Soap12.Attribute.Relay, Soap12.Namespace);
|
|
}
|
|
}
|
|
}
|
|
|
|
private string GetElementAttribute(string name, string ns, XmlElement element) {
|
|
if (element == null)
|
|
return null;
|
|
if (element.Prefix.Length == 0 && element.NamespaceURI == ns) {
|
|
if (element.HasAttribute(name))
|
|
return element.GetAttribute(name);
|
|
else
|
|
return null;
|
|
}
|
|
else {
|
|
if (element.HasAttribute(name, ns))
|
|
return element.GetAttribute(name, ns);
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|