2 // System.Web.Services.Protocols.WebServiceHandler.cs
\r
5 // Tim Coleman (tim@timcoleman.com)
\r
6 // Lluis Sanchez Gual (lluis@ximian.com)
\r
8 // Copyright (C) Tim Coleman, 2002
\r
12 using System.Reflection;
\r
13 using System.Web.Services;
\r
15 namespace System.Web.Services.Protocols {
\r
16 internal class WebServiceHandler: IHttpHandler {
\r
18 public virtual bool IsReusable
\r
20 get { return false; }
\r
23 public virtual void ProcessRequest (HttpContext context)
\r
28 protected IAsyncResult BeginCoreProcessRequest (AsyncCallback callback, object o)
\r
30 throw new NotImplementedException ();
\r
34 protected void CoreProcessRequest ()
\r
36 throw new NotImplementedException ();
\r
40 protected void EndCoreProcessRequest (IAsyncResult result)
\r
42 throw new NotImplementedException ();
\r
45 protected SoapServerMessage Invoke (SoapServerMessage requestMessage)
\r
47 MethodStubInfo methodInfo = requestMessage.MethodStubInfo;
\r
49 // Assign header values to web service members
\r
51 requestMessage.UpdateHeaderValues (requestMessage.Server, methodInfo.Headers);
\r
53 // Fill an array with the input parameters at the right position
\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
60 // Invoke the method
\r
64 object[] results = methodInfo.MethodInfo.Invoke (requestMessage.Server, parameters);
\r
65 requestMessage.OutParameters = results;
\r
67 catch (TargetInvocationException ex)
\r
69 throw ex.InnerException;
\r
72 // Check that headers with MustUnderstand flag have been understood
\r
74 foreach (SoapHeader header in requestMessage.Headers)
\r
76 if (header.MustUnderstand && !header.DidUnderstand)
\r
77 throw new SoapHeaderException ("Header not understood: " + header.GetType(), SoapException.MustUnderstandFaultCode);
\r
80 // Collect headers that must be sent to the client
\r
81 requestMessage.CollectHeaders (requestMessage.Server, methodInfo.Headers, SoapHeaderDirection.Out);
\r
83 return requestMessage;
\r
87 private void WriteReturns (object[] returnValues)
\r
89 //protocol.WriteReturns (returnValues, outputStream);
\r
90 throw new NotImplementedException ();
\r