2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Protocols / SoapHttpClientProtocol.cs
index 377fb0efdc68ff38444d5ad7b6af163a17f6fd5f..143432a50207121a1ecfd279bc44f86b28837f2a 100644 (file)
@@ -47,9 +47,15 @@ using System.Xml.Schema;
 using System.Collections;\r
 using System.Threading;\r
 \r
-namespace System.Web.Services.Protocols {\r
-       public class SoapHttpClientProtocol : HttpWebClientProtocol {\r
+namespace System.Web.Services.Protocols \r
+{\r
+       public class SoapHttpClientProtocol : HttpWebClientProtocol \r
+       {\r
                SoapTypeStubInfo type_info;\r
+#if NET_2_0\r
+               WsiClaims conformanceClaims;\r
+               SoapProtocolVersion soapVersion;\r
+#endif\r
 \r
                #region SoapWebClientAsyncResult class\r
 \r
@@ -238,6 +244,9 @@ namespace System.Web.Services.Protocols {
                                        msg = String.Format (msg, (int) code, code);\r
                                        throw new WebException (msg, null, WebExceptionStatus.ProtocolError, http_response);\r
                                }\r
+                               if (response.ContentLength == 0 && (code == HttpStatusCode.Accepted || code == HttpStatusCode.OK)) {\r
+                                       return new object[0];\r
+                               }\r
                        }\r
                        \r
                        //\r
@@ -263,13 +272,16 @@ namespace System.Web.Services.Protocols {
                        \r
                        // Deserialize the response\r
 \r
-                       StreamReader reader = new StreamReader (stream, encoding, false);\r
-                       XmlTextReader xml_reader = new XmlTextReader (reader);\r
-\r
                        SoapHeaderCollection headers;\r
                        object content;\r
 \r
-                       WebServiceHelper.ReadSoapMessage (xml_reader, type_info, msi.Use, msi.ResponseSerializer, out content, out headers);\r
+                       using (StreamReader reader = new StreamReader (stream, encoding, false)) {
+                               XmlTextReader xml_reader = new XmlTextReader (reader);
+
+                               WebServiceHelper.ReadSoapMessage (xml_reader, type_info, msi.Use, msi.ResponseSerializer,
+                                                               out content, out headers);
+                       }
+
                        \r
                        if (content is Fault)\r
                        {\r
@@ -320,7 +332,49 @@ namespace System.Web.Services.Protocols {
 \r
                        return ReceiveResponse (response, message, extensions);\r
                }\r
+               \r
+#if NET_2_0\r
+\r
+               [MonoTODO ("Do something with this")]\r
+               [System.Runtime.InteropServices.ComVisible(false)]\r
+               [Obsolete]\r
+               public WsiClaims ConformanceClaims {\r
+                       get { return conformanceClaims; }\r
+                       set { conformanceClaims = value; }\r
+               }\r
+               \r
+               [MonoTODO ("Do something with this")]\r
+               [System.Runtime.InteropServices.ComVisible(false)]\r
+               public SoapProtocolVersion SoapVersion {\r
+                       get { return soapVersion; }\r
+                       set { soapVersion = value; }\r
+               }\r
+               \r
+               protected void InvokeAsync (string methodName, object[] parameters, SendOrPostCallback callback)\r
+               {\r
+                       InvokeAsync (methodName, parameters, callback, null);\r
+               }\r
+\r
+               protected void InvokeAsync (string methodName, object[] parameters, SendOrPostCallback callback, object userState)\r
+               {\r
+                       InvokeAsyncInfo info = new InvokeAsyncInfo (callback, userState);\r
+                       BeginInvoke (methodName, parameters, new AsyncCallback (InvokeAsyncCallback), info);\r
+               }\r
+               \r
+               void InvokeAsyncCallback (IAsyncResult ar)\r
+               {\r
+                       InvokeAsyncInfo info = (InvokeAsyncInfo) ar.AsyncState;\r
+                       SoapWebClientAsyncResult sar = (SoapWebClientAsyncResult) ar;\r
+                       InvokeCompletedEventArgs args = new InvokeCompletedEventArgs (sar.Exception, false, info.UserState, (object[]) sar.Result);\r
+                       if (info.Context != null)\r
+                               info.Context.SendOrPost (info.Callback, args);\r
+                       else\r
+                               info.Callback (args);\r
+               }\r
+\r
+#endif\r
 \r
                #endregion // Methods\r
        }\r
 }
+\r