Small workaround for the stack thing.
authorMiguel de Icaza <miguel@gnome.org>
Wed, 30 Apr 2003 03:33:59 +0000 (03:33 -0000)
committerMiguel de Icaza <miguel@gnome.org>
Wed, 30 Apr 2003 03:33:59 +0000 (03:33 -0000)
Fetch the Action
Post the action.

svn path=/trunk/mcs/; revision=14133

mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog
mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs

index d61839964f9b18d4c76eaa187eb3068b7a7398c1..f6af5d5c7ab22573af45eb58744ae03fc56609a5 100644 (file)
@@ -1,6 +1,7 @@
 2003-04-29  Miguel de Icaza  <miguel@ximian.com>
 
        * SoapHttpClientProtocol.cs (CreateMessage): Extract information
+       from the method to be called.
 
        * SoapDocumentMethodAttribute.cs: Do not initialize all the fields
        on the attribute at bootstrap, for default values, just compute
index 1f9d7c1267bc6d829f882ab6c3f48a0b3e098e1f..7c408bd879091cb799392d36748823805e5ef4d8 100644 (file)
@@ -47,18 +47,49 @@ namespace System.Web.Services.Protocols {
 \r
                protected override WebRequest GetWebRequest (Uri uri)\r
                {\r
-                       return WebRequest.Create (uri);\r
+                       WebRequest request = WebRequest.Create (uri);\r
+                       request.Method = "POST";\r
+\r
+                       return request;\r
                }\r
 \r
+               //\r
+               // Just for debugging\r
+               //\r
+               void DumpStackFrames ()\r
+               {\r
+                       StackTrace st = new StackTrace ();\r
+\r
+                       for (int i = 0; i < st.FrameCount; i++){\r
+                               StackFrame sf = st.GetFrame (i);\r
+                               Console.WriteLine ("At frame: {0} {1}", i, sf.GetMethod ().Name);\r
+                       }\r
+               }\r
+               \r
                //\r
                // The `method_name' should be the name of our invoker, this is only used\r
                // for sanity checks, nothing else\r
                //\r
                MethodInfo GetCallerMethod (string method_name)\r
                {\r
-                       StackFrame stack_frame = new StackFrame (5, false);\r
-                       MethodInfo mi = (MethodInfo) stack_frame.GetMethod ();\r
+                       MethodInfo mi;\r
+#if StackFrameWorks\r
+                       StackFrame stack_trace = new StackFrame (5, false);\r
+                       mi = (MethodInfo) stack_frame.GetMethod ();\r
 \r
+#else\r
+                       //\r
+                       // Temporary hack: look for a type which is not this type\r
+                       //\r
+                       StackTrace st = new StackTrace ();\r
+                       mi = null;\r
+                       for (int i = 0; i < st.FrameCount; i++){\r
+                               StackFrame sf = st.GetFrame (i);\r
+                               mi = (MethodInfo) sf.GetMethod ();\r
+                               if (mi.DeclaringType != typeof (SoapHttpClientProtocol))\r
+                                       break;\r
+                       }\r
+#endif\r
                        //\r
                        // A few sanity checks, just in case the code moves around later\r
                        //\r
@@ -89,12 +120,18 @@ namespace System.Web.Services.Protocols {
                        \r
                        SoapClientMessage message = new SoapClientMessage (\r
                                this, sma, new LogicalMethodInfo (mi), sma.OneWay, Url);\r
-                       \r
-                       return null;\r
+\r
+                       return message;\r
                }\r
                \r
                void SendMessage (WebRequest request, SoapClientMessage message)\r
                {\r
+                       WebHeaderCollection headers = request.Headers;\r
+                       headers.Add ("SOAPAction", message.Action);\r
+\r
+                       // create envelope\r
+                       // create body\r
+                       // serialize arguments\r
                        \r
                }\r
                \r
@@ -103,7 +140,8 @@ namespace System.Web.Services.Protocols {
                        SoapClientMessage message = CreateMessage (method_name, parameters);\r
                        WebRequest request = GetWebRequest (uri);\r
                        Stream s = request.GetRequestStream ();\r
-                       \r
+\r
+\r
                        try {\r
                                SendMessage (request, message);\r
                        } finally {\r