* HttpSoapWebServiceHandler.cs: MS puts the soap action in quotation marks??
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Protocols / WebServiceHandler.cs
1 // \r
2 // System.Web.Services.Protocols.WebServiceHandler.cs\r
3 //\r
4 // Author:\r
5 //   Tim Coleman (tim@timcoleman.com)\r
6 //   Lluis Sanchez Gual (lluis@ximian.com)\r
7 //\r
8 // Copyright (C) Tim Coleman, 2002\r
9 //\r
10 \r
11 using System;\r
12 using System.Reflection;\r
13 using System.Web.Services;\r
14 \r
15 namespace System.Web.Services.Protocols {\r
16         internal class WebServiceHandler: IHttpHandler {\r
17 \r
18                 public virtual bool IsReusable \r
19                 {\r
20                         get { return false; }\r
21                 }\r
22 \r
23                 public virtual void ProcessRequest (HttpContext context)\r
24                 {\r
25                 }\r
26 \r
27                 [MonoTODO]\r
28                 protected IAsyncResult BeginCoreProcessRequest (AsyncCallback callback, object o)\r
29                 {\r
30                         throw new NotImplementedException ();\r
31                 }\r
32 \r
33                 [MonoTODO]\r
34                 protected void CoreProcessRequest ()\r
35                 {\r
36                         throw new NotImplementedException ();\r
37                 }\r
38 \r
39                 [MonoTODO]\r
40                 protected void EndCoreProcessRequest (IAsyncResult result)\r
41                 {\r
42                         throw new NotImplementedException ();\r
43                 }\r
44 \r
45                 protected SoapServerMessage Invoke (SoapServerMessage requestMessage)\r
46                 {\r
47                         MethodStubInfo methodInfo = requestMessage.MethodStubInfo;\r
48 \r
49                         // Assign header values to web service members\r
50 \r
51                         requestMessage.UpdateHeaderValues (requestMessage.Server, methodInfo.Headers);\r
52 \r
53                         // Fill an array with the input parameters at the right position\r
54 \r
55                         object[] parameters = new object[methodInfo.MethodInfo.Parameters.Length];\r
56                         ParameterInfo[] inParams = methodInfo.MethodInfo.InParameters;\r
57                         for (int n=0; n<inParams.Length; n++)\r
58                                 parameters [inParams[n].Position - 1] = requestMessage.InParameters [n];\r
59 \r
60                         // Invoke the method\r
61 \r
62                         try\r
63                         {\r
64                                 object[] results = methodInfo.MethodInfo.Invoke (requestMessage.Server, parameters);\r
65                                 requestMessage.OutParameters = results;\r
66                         }\r
67                         catch (TargetInvocationException ex)\r
68                         {\r
69                                 throw ex.InnerException;\r
70                         }\r
71 \r
72                         // Check that headers with MustUnderstand flag have been understood\r
73                         \r
74                         foreach (SoapHeader header in requestMessage.Headers)\r
75                         {\r
76                                 if (header.MustUnderstand && !header.DidUnderstand)\r
77                                         throw new SoapHeaderException ("Header not understood: " + header.GetType(), SoapException.MustUnderstandFaultCode);\r
78                         }\r
79 \r
80                         // Collect headers that must be sent to the client\r
81                         requestMessage.CollectHeaders (requestMessage.Server, methodInfo.Headers, SoapHeaderDirection.Out);\r
82 \r
83                         return requestMessage;\r
84                 }\r
85 \r
86                 [MonoTODO]\r
87                 private void WriteReturns (object[] returnValues)\r
88                 {\r
89                         //protocol.WriteReturns (returnValues, outputStream);\r
90                         throw new NotImplementedException ();\r
91                 }\r
92         }\r
93 }\r