We need you! We're working hard on the next version of Developer Fusion -
Let us know what you think we should be up to!
- namespace System.Runtime.Serialization.Formatters.Soap
- {
- using System;
- using System.Collections;
- using System.Reflection;
- using System.Text;
- using System.Globalization;
- using System.Runtime.Serialization.Formatters;
- using System.Runtime.Remoting;
- using System.Runtime.Remoting.Metadata;
- using System.Runtime.Remoting.Messaging;
- using System.Runtime.InteropServices;
- using System.Runtime.Serialization;
- using System.Resources;
- using System.Diagnostics;
-
-
- internal sealed class AttributeList
- {
- private SerStack nameA = new SerStack("AttributeName");
- private SerStack valueA = new SerStack("AttributeValue");
-
- internal int Count {
- get { return nameA.Count(); }
- }
-
- internal void Clear()
- {
- nameA.Clear();
- valueA.Clear();
- }
-
- internal void Put(string name, string value)
- {
- nameA.Push(name);
- valueA.Push(value);
- }
-
- internal void Get(int index, out string name, out string value)
- {
- name = (string)nameA.Next();
- value = (string)valueA.Next();
- }
-
- [Conditional("SER_LOGGING")]
- internal void Dump()
- {
- nameA.Dump();
- valueA.Dump();
- }
- }
-
-
-
- internal sealed class SerStack
- {
-
- internal object[] objects = new object[10];
- internal string stackId;
- internal int top = -1;
- internal int next = 0;
-
- internal SerStack(string stackId)
- {
- this.stackId = stackId;
- }
-
- internal object GetItem(int index)
- {
- return objects[index];
- }
-
- internal void Clear()
- {
- top = -1;
- next = 0;
- }
-
-
- internal void Push(object obj)
- {
- InternalST.Soap(this, "Push ", stackId, " ", ((obj is ITrace) ? ((ITrace)obj).Trace() : ""));
- if (top == (objects.Length - 1)) {
- IncreaseCapacity();
- }
- objects[++top] = obj;
- }
-
-
- internal object Pop()
- {
- if (top < 0)
- return null;
-
- object obj = objects[top];
- objects[top--] = null;
- InternalST.Soap(this, "Pop ", stackId, " ", ((obj is ITrace) ? ((ITrace)obj).Trace() : ""));
- return obj;
- }
-
- internal object Next()
- {
- if (next > top)
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_StackRange"), stackId));
- return objects[next++];
- }
-
- internal void IncreaseCapacity()
- {
- int size = objects.Length * 2;
- object[] newItems = new object[size];
- Array.Copy(objects, 0, newItems, 0, objects.Length);
- objects = newItems;
- }
-
-
- internal object Peek()
- {
- if (top < 0)
- return null;
- InternalST.Soap(this, "Peek ", stackId, " ", ((objects[top] is ITrace) ? ((ITrace)objects[top]).Trace() : ""));
- return objects[top];
- }
-
-
- internal object PeekPeek()
- {
- if (top < 1)
- return null;
- InternalST.Soap(this, "PeekPeek ", stackId, " ", ((objects[top - 1] is ITrace) ? ((ITrace)objects[top - 1]).Trace() : ""));
- return objects[top - 1];
- }
-
-
- internal int Count()
- {
- return top + 1;
- }
-
-
- internal bool IsEmpty()
- {
- if (top > 0)
- return false;
- else
- return true;
- }
-
-
- internal void Reverse()
- {
- Array.Reverse(objects, 0, Count());
- }
-
- [Conditional("SER_LOGGING")]
- internal void Dump()
- {
- for (int i = 0; i < Count(); i++) {
- object obj = objects[i];
- InternalST.Soap(this, "Stack Dump ", stackId, " " + ((obj is ITrace) ? ((ITrace)obj).Trace() : ""));
- }
- }
- }
-
-
- internal sealed class NameCacheEntry
- {
- internal string name;
- internal object value;
- }
-
-
- internal sealed class NameCache
- {
- private const int MAX_CACHE_ENTRIES = 353;
-
- static NameCacheEntry[] nameCache = new NameCacheEntry[MAX_CACHE_ENTRIES];
-
- int probe = 0;
- string name = null;
-
- internal object GetCachedValue(string name)
- {
- this.name = name;
- probe = Math.Abs(name.GetHashCode()) % MAX_CACHE_ENTRIES;
- NameCacheEntry entry = nameCache[probe];
- if (entry == null) {
- entry = new NameCacheEntry();
- entry.name = name;
- return null;
- }
- else if (entry.name == name) {
- return entry.value;
- }
- else
- return null;
- }
-
- internal void SetCachedValue(object value)
- {
- NameCacheEntry entry = new NameCacheEntry();
- entry.name = name;
- entry.value = value;
- nameCache[probe] = entry;
- }
- }
-
-
-
- static internal class SoapUtil
- {
- static internal Type typeofString = typeof(string);
- static internal Type typeofBoolean = typeof(bool);
- static internal Type typeofObject = typeof(object);
- static internal Type typeofSoapFault = typeof(SoapFault);
- static internal Assembly urtAssembly = Assembly.GetAssembly(typeofString);
- static internal string urtAssemblyString = urtAssembly.FullName;
-
- [Conditional("SER_LOGGING")]
- static internal void DumpHash(string tag, Hashtable hashTable)
- {
- IDictionaryEnumerator e = hashTable.GetEnumerator();
- InternalST.Soap("HashTable Dump Begin ", tag);
- while (e.MoveNext()) {
- InternalST.Soap("HashTable key " + e.Key + ", value " + e.Value);
- }
- InternalST.Soap("HashTable Dump end \n");
- }
-
-
- static internal ResourceManager SystemResMgr;
-
- private static ResourceManager InitResourceManager()
- {
- if (SystemResMgr == null)
- SystemResMgr = new ResourceManager("SoapFormatter", typeof(SoapParser).Module.Assembly);
- return SystemResMgr;
- }
-
-
-
- static internal string GetResourceString(string key)
- {
- if (SystemResMgr == null)
- InitResourceManager();
- string s = SystemResMgr.GetString(key, null);
- InternalST.SoapAssert(s != null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild the SoapFormatter and SoapFormatter.resource after adding a resource to SoapFormatter.txt? Debug this w/ cordbg and bug whoever owns the code that called SoapUtil.GetResourceString. Resource name was: \"" + key + "\"");
- return s;
- }
-
- static internal string GetResourceString(string key, params object[] values)
- {
- if (SystemResMgr == null)
- InitResourceManager();
- string s = SystemResMgr.GetString(key, null);
- InternalST.SoapAssert(s != null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild mscorlib after adding a resource to resources.txt? Debug this w/ cordbg and bug whoever owns the code that called Environment.GetResourceString. Resource name was: \"" + key + "\"");
- return String.Format(CultureInfo.CurrentCulture, s, values);
- }
- }
-
- internal sealed class SoapAssemblyInfo
- {
- internal string assemblyString;
- private Assembly assembly;
-
- internal SoapAssemblyInfo(string assemblyString)
- {
- this.assemblyString = assemblyString;
- }
-
- internal SoapAssemblyInfo(string assemblyString, Assembly assembly)
- {
- this.assemblyString = assemblyString;
- this.assembly = assembly;
- }
-
- internal Assembly GetAssembly(ObjectReader objectReader)
- {
- if (assembly == null) {
- assembly = objectReader.LoadAssemblyFromString(assemblyString);
- if (assembly == null)
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_AssemblyString"), assemblyString));
- }
- return assembly;
- }
- }
-
-
-
- internal sealed class ParseRecord : ITrace
- {
- static internal int parseRecordIdCount = 1;
-
-
- internal int PRparseRecordId = 0;
-
-
- internal InternalParseTypeE PRparseTypeEnum = InternalParseTypeE.Empty;
- internal InternalObjectTypeE PRobjectTypeEnum = InternalObjectTypeE.Empty;
- internal InternalArrayTypeE PRarrayTypeEnum = InternalArrayTypeE.Empty;
- internal InternalMemberTypeE PRmemberTypeEnum = InternalMemberTypeE.Empty;
- internal InternalMemberValueE PRmemberValueEnum = InternalMemberValueE.Empty;
- internal InternalObjectPositionE PRobjectPositionEnum = InternalObjectPositionE.Empty;
-
-
- internal string PRname;
- internal string PRnameXmlKey;
- internal string PRxmlNameSpace;
- internal bool PRisParsed = false;
- internal bool PRisProcessAttributes = false;
-
-
- internal string PRvalue;
- internal object PRvarValue;
-
-
- internal string PRkeyDt;
- internal string PRtypeXmlKey;
- internal Type PRdtType;
- internal string PRassemblyName;
- internal InternalPrimitiveTypeE PRdtTypeCode;
- internal bool PRisVariant = false;
-
- internal bool PRisEnum = false;
-
-
- internal long PRobjectId;
-
-
- internal long PRidRef;
-
-
-
-
- internal string PRarrayElementTypeString;
- internal Type PRarrayElementType;
- internal bool PRisArrayVariant = false;
- internal InternalPrimitiveTypeE PRarrayElementTypeCode;
-
-
-
-
-
-
- internal string PRprimitiveArrayTypeString;
-
-
- internal int PRrank;
- internal int[] PRlengthA;
- internal int[] PRpositionA;
- internal int[] PRlowerBoundA;
- internal int[] PRupperBoundA;
-
-
-
- internal int[] PRindexMap;
- internal int PRmemberIndex;
- internal int PRlinearlength;
- internal int[] PRrectangularMap;
- internal bool PRisLowerBound;
-
-
- internal long PRtopId;
- internal long PRheaderId;
- internal bool PRisHeaderRoot;
- internal bool PRisAttributesProcessed;
-
-
- internal bool PRisMustUnderstand;
-
-
-
- internal InternalParseStateE PRparseStateEnum = InternalParseStateE.Initial;
- internal bool PRisWaitingForNestedObject = false;
-
-
-
- internal ReadObjectInfo PRobjectInfo;
-
-
- internal bool PRisValueTypeFixup = false;
-
-
- internal object PRnewObj;
- internal object[] PRobjectA;
-
- internal PrimitiveArray PRprimitiveArray;
-
- internal bool PRisRegistered;
-
- internal bool PRisXmlAttribute;
-
-
-
- internal ParseRecord()
- {
- Counter();
- }
-
- private void Counter()
- {
-
- lock (typeof(ParseRecord)) {
- PRparseRecordId = parseRecordIdCount++;
- }
-
- }
-
- public string Trace()
- {
-
- return "ParseRecord" + PRparseRecordId + " ParseType " + ((Enum)PRparseTypeEnum).ToString() + " name " + PRname + " keyDt " + Util.PString(PRkeyDt);
- }
-
-
- internal void Init()
- {
-
- PRparseTypeEnum = InternalParseTypeE.Empty;
- PRobjectTypeEnum = InternalObjectTypeE.Empty;
- PRarrayTypeEnum = InternalArrayTypeE.Empty;
- PRmemberTypeEnum = InternalMemberTypeE.Empty;
- PRmemberValueEnum = InternalMemberValueE.Empty;
- PRobjectPositionEnum = InternalObjectPositionE.Empty;
-
-
- PRname = null;
- PRnameXmlKey = null;
- PRxmlNameSpace = null;
- PRisParsed = false;
- PRisProcessAttributes = false;
-
-
- PRvalue = null;
-
-
- PRkeyDt = null;
- PRdtType = null;
- PRassemblyName = null;
- PRdtTypeCode = InternalPrimitiveTypeE.Invalid;
- PRisEnum = false;
-
-
- PRobjectId = 0;
-
-
- PRidRef = 0;
-
-
-
-
- PRarrayElementTypeString = null;
- PRarrayElementType = null;
- PRisArrayVariant = false;
- PRarrayElementTypeCode = InternalPrimitiveTypeE.Invalid;
-
-
-
- PRprimitiveArrayTypeString = null;
-
-
- PRrank = 0;
- PRlengthA = null;
- PRpositionA = null;
- PRlowerBoundA = null;
- PRupperBoundA = null;
-
-
- PRindexMap = null;
- PRmemberIndex = 0;
- PRlinearlength = 0;
- PRrectangularMap = null;
- PRisLowerBound = false;
-
-
- PRtopId = 0;
- PRheaderId = 0;
- PRisHeaderRoot = false;
- PRisAttributesProcessed = false;
-
-
- PRisMustUnderstand = false;
-
-
- PRparseStateEnum = InternalParseStateE.Initial;
- PRisWaitingForNestedObject = false;
-
-
-
- PRisValueTypeFixup = false;
-
- PRnewObj = null;
- PRobjectA = null;
- PRprimitiveArray = null;
- PRobjectInfo = null;
- PRisRegistered = false;
-
- PRisXmlAttribute = false;
- }
-
- internal ParseRecord Copy()
- {
-
- ParseRecord newPr = new ParseRecord();
-
- newPr.PRparseTypeEnum = PRparseTypeEnum;
- newPr.PRobjectTypeEnum = PRobjectTypeEnum;
- newPr.PRarrayTypeEnum = PRarrayTypeEnum;
- newPr.PRmemberTypeEnum = PRmemberTypeEnum;
- newPr.PRmemberValueEnum = PRmemberValueEnum;
- newPr.PRobjectPositionEnum = PRobjectPositionEnum;
-
-
- newPr.PRname = PRname;
- newPr.PRisParsed = PRisParsed;
- newPr.PRisProcessAttributes = PRisProcessAttributes;
- newPr.PRnameXmlKey = PRnameXmlKey;
- newPr.PRxmlNameSpace = PRxmlNameSpace;
-
-
- newPr.PRvalue = PRvalue;
-
-
-
- newPr.PRkeyDt = PRkeyDt;
- newPr.PRdtType = PRdtType;
- newPr.PRassemblyName = PRassemblyName;
- newPr.PRdtTypeCode = PRdtTypeCode;
- newPr.PRisEnum = PRisEnum;
-
-
- newPr.PRobjectId = PRobjectId;
-
-
- newPr.PRidRef = PRidRef;
-
-
-
-
- newPr.PRarrayElementTypeString = PRarrayElementTypeString;
- newPr.PRarrayElementType = PRarrayElementType;
- newPr.PRisArrayVariant = PRisArrayVariant;
- newPr.PRarrayElementTypeCode = PRarrayElementTypeCode;
-
-
-
- newPr.PRprimitiveArrayTypeString = PRprimitiveArrayTypeString;
-
-
- newPr.PRrank = PRrank;
- newPr.PRlengthA = PRlengthA;
- newPr.PRpositionA = PRpositionA;
- newPr.PRlowerBoundA = PRlowerBoundA;
- newPr.PRupperBoundA = PRupperBoundA;
-
-
- newPr.PRindexMap = PRindexMap;
- newPr.PRmemberIndex = PRmemberIndex;
- newPr.PRlinearlength = PRlinearlength;
- newPr.PRrectangularMap = PRrectangularMap;
- newPr.PRisLowerBound = PRisLowerBound;
-
-
- newPr.PRtopId = PRtopId;
- newPr.PRheaderId = PRheaderId;
- newPr.PRisHeaderRoot = PRisHeaderRoot;
- newPr.PRisAttributesProcessed = PRisAttributesProcessed;
-
-
- newPr.PRisMustUnderstand = PRisMustUnderstand;
-
-
- newPr.PRparseStateEnum = PRparseStateEnum;
- newPr.PRisWaitingForNestedObject = PRisWaitingForNestedObject;
-
-
-
- newPr.PRisValueTypeFixup = PRisValueTypeFixup;
-
- newPr.PRnewObj = PRnewObj;
- newPr.PRobjectA = PRobjectA;
- newPr.PRprimitiveArray = PRprimitiveArray;
- newPr.PRobjectInfo = PRobjectInfo;
- newPr.PRisRegistered = PRisRegistered;
- newPr.PRisXmlAttribute = PRisXmlAttribute;
-
- return newPr;
- }
-
-
-
- [Conditional("SER_LOGGING")]
- internal void Dump()
- {
- #if _DEBUG
- InternalST.Soap("ParseRecord Dump ", PRparseRecordId);
- InternalST.Soap("Enums");
- Util.NVTrace("ParseType", ((Enum)PRparseTypeEnum).ToString());
- Util.NVTrace("ObjectType", ((Enum)PRobjectTypeEnum).ToString());
- Util.NVTrace("ArrayType", ((Enum)PRarrayTypeEnum).ToString());
- Util.NVTrace("MemberType", ((Enum)PRmemberTypeEnum).ToString());
- Util.NVTrace("MemberValue", ((Enum)PRmemberValueEnum).ToString());
- Util.NVTrace("ObjectPosition", ((Enum)PRobjectPositionEnum).ToString());
- Util.NVTrace("ParseState", ((Enum)PRparseStateEnum).ToString());
- InternalST.Soap("Basics");
- Util.NVTrace("Name", PRname);
- Util.NVTrace("PRisParsed", PRisParsed);
- Util.NVTrace("PRisProcessAttributes", PRisParsed);
- Util.NVTrace("PRnameXmlKey", PRnameXmlKey);
- Util.NVTrace("PRxmlNameSpace", PRxmlNameSpace);
- Util.NVTrace("Value ", PRvalue);
- Util.NVTrace("varValue ", PRvarValue);
- if (PRvarValue != null)
- Util.NVTrace("varValue type", PRvarValue.GetType());
-
- Util.NVTrace("keyDt", PRkeyDt);
- Util.NVTrace("dtType", PRdtType);
- Util.NVTrace("assemblyName", PRassemblyName);
- Util.NVTrace("code", ((Enum)PRdtTypeCode).ToString());
- Util.NVTrace("objectID", PRobjectId);
- Util.NVTrace("idRef", PRidRef);
- Util.NVTrace("isEnum", PRisEnum);
- InternalST.Soap("Array ");
- Util.NVTrace("arrayElementTypeString", PRarrayElementTypeString);
- Util.NVTrace("arrayElementType", PRarrayElementType);
- Util.NVTrace("arrayElementTypeCode", ((Enum)PRarrayElementTypeCode).ToString());
- Util.NVTrace("isArrayVariant", PRisArrayVariant);
- Util.NVTrace("primitiveArrayTypeString", PRprimitiveArrayTypeString);
- Util.NVTrace("rank", PRrank);
- Util.NVTrace("dimensions", Util.PArray(PRlengthA));
- Util.NVTrace("position", Util.PArray(PRpositionA));
- Util.NVTrace("lowerBoundA", Util.PArray(PRlowerBoundA));
- Util.NVTrace("upperBoundA", Util.PArray(PRupperBoundA));
- InternalST.Soap("Header ");
- Util.NVTrace("isMustUnderstand", PRisMustUnderstand);
- Util.NVTrace("isHeaderRoot", PRisHeaderRoot);
- Util.NVTrace("isAttributesProcessed", PRisAttributesProcessed);
- Util.NVTrace("isXmlAttribute", PRisXmlAttribute);
-
- InternalST.Soap("New Object");
- if (PRnewObj != null)
- Util.NVTrace("newObj", PRnewObj);
-
-
- #endif
- }
- }
-
- internal interface ITrace
- {
- string Trace();
- }
-
-
- static internal class Util
- {
-
-
- static internal string PString(string value)
- {
- if (value == null)
- return "";
- else
- return value;
- }
-
- #if _DEBUG
-
- static internal string PString(object value)
- {
- if (value == null)
- return "";
- else
- return value.ToString();
- }
-
-
-
- static internal string PArray(int[] array)
- {
- if (array != null) {
- StringBuilder sb = new StringBuilder(10);
- sb.Append("[");
- for (int i = 0; i < array.Length; i++) {
- sb.Append(array[i]);
- if (i != array.Length - 1)
- sb.Append(",");
- }
- sb.Append("]");
- return sb.ToString();
- }
- else
- return "";
- }
- #endif
-
-
-
- [Conditional("SER_LOGGING")]
- static internal void NVTrace(string name, string value)
- {
- InternalST.Soap(" " + name + ((value == null) ? " = null" : " = " + value));
- }
-
-
- [Conditional("SER_LOGGING")]
- static internal void NVTrace(string name, object value)
- {
- try {
- InternalST.Soap(" " + name + ((value == null) ? " = null" : " = " + value.ToString()));
- }
- catch {
- InternalST.Soap(" " + name + " = null");
-
- }
- }
-
-
-
- [Conditional("_LOGGING")]
- static internal void NVTraceI(string name, string value)
- {
- InternalST.Soap(" " + name + ((value == null) ? " = null" : " = " + value));
- }
-
-
- [Conditional("_LOGGING")]
- static internal void NVTraceI(string name, object value)
- {
- InternalST.Soap(" " + name + ((value == null) ? " = null" : " = " + value.ToString()));
- }
-
- }
-
-
-
- internal class ValueFixup : ITrace
- {
- internal ValueFixupEnum valueFixupEnum = ValueFixupEnum.Empty;
- internal Array arrayObj;
- internal int[] indexMap;
- internal object memberObject;
- internal ReadObjectInfo objectInfo;
- internal string memberName;
-
- internal ValueFixup(Array arrayObj, int[] indexMap)
- {
- InternalST.Soap(this, "Array Constructor ", arrayObj);
- valueFixupEnum = ValueFixupEnum.Array;
- this.arrayObj = arrayObj;
- this.indexMap = indexMap;
- }
-
- internal ValueFixup(object memberObject, string memberName, ReadObjectInfo objectInfo)
- {
- InternalST.Soap(this, "Member Constructor ", memberObject);
- valueFixupEnum = ValueFixupEnum.Member;
- this.memberObject = memberObject;
- this.memberName = memberName;
- this.objectInfo = objectInfo;
- }
-
- internal virtual void Fixup(ParseRecord record, ParseRecord parent)
- {
- object obj = record.PRnewObj;
- InternalST.Soap(this, "Fixup ", obj, " ", ((Enum)valueFixupEnum).ToString());
-
- switch (valueFixupEnum) {
- case ValueFixupEnum.Array:
- arrayObj.SetValue(obj, indexMap);
- break;
- case ValueFixupEnum.Member:
-
- InternalST.Soap(this, "Fixup Member new object value ", obj, " memberObject ", memberObject);
-
- if (objectInfo.isSi) {
- InternalST.Soap(this, "Recording a fixup on member: ", memberName, " in object id", parent.PRobjectId, " Required Object ", record.PRobjectId);
- objectInfo.objectManager.RecordDelayedFixup(parent.PRobjectId, memberName, record.PRobjectId);
- }
- else {
- MemberInfo memberInfo = objectInfo.GetMemberInfo(memberName);
- InternalST.Soap(this, "Recording a fixup on member:", memberInfo, " in object id ", parent.PRobjectId, " Required Object", record.PRobjectId);
- objectInfo.objectManager.RecordFixup(parent.PRobjectId, memberInfo, record.PRobjectId);
- }
- break;
- }
- }
-
- public virtual string Trace()
- {
- return "ValueFixup" + ((Enum)valueFixupEnum).ToString();
- }
-
- }
-
-
- internal sealed class InternalFE
- {
- internal FormatterTypeStyle FEtypeFormat;
- internal FormatterAssemblyStyle FEassemblyFormat;
- internal ISoapMessage FEtopObject;
- internal TypeFilterLevel FEsecurityLevel;
- internal InternalSerializerTypeE FEserializerTypeEnum;
- }
-
-
-
-
-
-
- [Serializable()]
- internal sealed class InternalSoapMessage : ISerializable, IFieldInfo
- {
- internal string methodName = null;
- internal string xmlNameSpace = null;
- internal string[] paramNames = null;
- internal object[] paramValues = null;
- internal Type[] paramTypes = null;
- internal Hashtable keyToNamespaceTable = null;
-
-
- internal InternalSoapMessage()
- {
- InternalST.Soap(this, "Constructor Read Unitialized ");
- }
-
-
- internal InternalSoapMessage(string methodName, string xmlNameSpace, string[] paramNames, object[] paramValues, Type[] paramTypes)
- {
- InternalST.Soap(this, "Constructor Write ", methodName);
- this.methodName = methodName;
- this.xmlNameSpace = xmlNameSpace;
- this.paramNames = paramNames;
- this.paramValues = paramValues;
- this.paramTypes = paramTypes;
- }
-
- internal InternalSoapMessage(SerializationInfo info, StreamingContext context)
- {
- InternalST.Soap(this, "Constructor Write SetObjectData ");
- SetObjectData(info, context);
- }
-
-
- public string[] FieldNames {
- get { return paramNames; }
- set { paramNames = value; }
- }
-
-
- public Type[] FieldTypes {
- get { return paramTypes; }
- set { paramTypes = value; }
- }
-
-
- public void GetObjectData(SerializationInfo info, StreamingContext context)
- {
-
- int numberOfMembers = 0;
-
- if (paramValues != null)
- numberOfMembers = paramValues.Length;
-
- InternalST.Soap(this, "GetObjectData ", methodName, " " + numberOfMembers);
-
- info.FullTypeName = methodName;
- if (xmlNameSpace != null)
- info.AssemblyName = xmlNameSpace;
-
- string paramName = null;
- if (paramValues != null) {
- for (int i = 0; i < paramValues.Length; i++) {
- InternalST.Soap(this, "GetObjectData AddValue ", paramNames[i], " ", paramValues[i]);
-
- if ((paramNames != null) && (paramNames[i] == null))
- paramName = "param" + i;
- else
- paramName = paramNames[i];
- info.AddValue(paramName, paramValues[i], typeof(object));
- }
- }
-
- }
-
- internal void SetObjectData(SerializationInfo info, StreamingContext context)
- {
- InternalST.Soap(this, "SetObjectData ");
- ArrayList paramValuesList = new ArrayList(20);
- methodName = (string)info.GetString("__methodName");
- keyToNamespaceTable = (Hashtable)info.GetValue("__keyToNamespaceTable", typeof(Hashtable));
- ArrayList paramNamesList = (ArrayList)info.GetValue("__paramNameList", typeof(ArrayList));
- xmlNameSpace = (string)info.GetString("__xmlNameSpace");
-
- for (int i = 0; i < paramNamesList.Count; i++)
- paramValuesList.Add(info.GetValue((string)paramNamesList[i], Converter.typeofObject));
-
- paramNames = new string[paramNamesList.Count];
- paramValues = new object[paramValuesList.Count];
-
- for (int i = 0; i < paramNamesList.Count; i++) {
- paramNames[i] = (string)paramNamesList[i];
- paramValues[i] = (object)paramValuesList[i];
- InternalST.Soap(this, "SetObjectData param ", i, " ", paramNames[i], " paramValue ", paramValues[i]);
- }
- }
- }
-
- internal sealed class SoapAttributeInfo
- {
- internal SoapAttributeType m_attributeType;
- internal string m_nameSpace;
- internal string m_elementName;
- internal string m_typeName;
- internal string m_typeNamespace;
-
- inter