X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web.Services%2FSystem.Web.Services.Protocols%2FSoapMessage.cs;h=499eba92aabe8549d6778d79dbcec587186a64db;hb=255babd8a9cd6d66b3f25b9d99e017232cc0cf18;hp=26cca826cea4a8feea0b62a20d19faf16d23c1e2;hpb=311407acb2aff874572e0d7b4dc94668df720d79;p=mono.git diff --git a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs index 26cca826cea..499eba92aab 100644 --- a/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs +++ b/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapMessage.cs @@ -36,9 +36,8 @@ namespace System.Web.Services.Protocols { headers = new SoapHeaderCollection (); } - internal SoapMessage (Stream stream, SoapHeaderCollection headers) + internal SoapMessage (Stream stream) { - this.headers = headers; this.stream = stream; } @@ -136,10 +135,55 @@ namespace System.Web.Services.Protocols { public object GetReturnValue () { - if (MethodInfo.IsVoid) return null; - else return outParameters [0]; + if (!MethodInfo.IsVoid && exception == null) return outParameters [0]; + else return null; + } + + internal void SetHeaders (SoapHeaderCollection headers) + { + this.headers = headers; + } + + internal void SetException (SoapException ex) + { + exception = ex; + } + + internal void CollectHeaders (object target, HeaderInfo[] headers, SoapHeaderDirection direction) + { + Headers.Clear (); + foreach (HeaderInfo hi in headers) + { + if ((hi.Direction & direction) != 0) + { + SoapHeader headerVal = hi.GetHeaderValue (target) as SoapHeader; + if (headerVal != null) + Headers.Add (headerVal); + } + } + } + + internal void UpdateHeaderValues (object target, HeaderInfo[] headersInfo) + { + foreach (SoapHeader header in Headers) + { + HeaderInfo hinfo = FindHeader (headersInfo, header.GetType ()); + if (hinfo != null) + hinfo.SetHeaderValue (target, header); + else + if (header.MustUnderstand) + throw new SoapHeaderException ("Unknown header", SoapException.MustUnderstandFaultCode); + header.DidUnderstand = false; + } + } + + HeaderInfo FindHeader (HeaderInfo[] headersInfo, Type headerType) + { + foreach (HeaderInfo headerInfo in headersInfo) + if (headerInfo.HeaderType == headerType) return headerInfo; + return null; } #endregion // Methods } -} +}