using System.Text;
using System.Xml.Serialization;
using System.Xml.Schema;
+using System.Web.Compilation;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
using System.Web.Services.Configuration;
public SoapDocumentationHandler (Type type, HttpContext context): base (type)
{
_url = context.Request.Url.ToString();
- int i = _url.LastIndexOf ('?');
+ int i = _url.IndexOf ('?');
if (i != -1) _url = _url.Substring (0,i);
_typeStubInfo = (SoapTypeStubInfo) TypeStubManager.GetTypeStub (ServiceType, "Soap");
if (key == "wsdl" || key == "schema" || key == "code" || key == "disco")
return;
-#if NET_2_0
- string help = WebServicesSection.Instance.WsdlHelpGenerator.Href;
+ string help = WebServicesSection.Current.WsdlHelpGenerator.Href;
string path = Path.GetDirectoryName (ConfigurationManager.OpenMachineConfiguration().FilePath);
-#else
- string help = WSConfig.Instance.WsdlHelpPage;
- string path = Path.GetDirectoryName (WSConfig.Instance.ConfigFilePath);
-#endif
string appPath = AppDomain.CurrentDomain.GetData (".appPath").ToString ();
string vpath;
if (path.StartsWith (appPath)) {
string physPath = Path.Combine (path, help);
-#if !TARGET_JVM
if (!File.Exists (physPath))
throw new InvalidOperationException ("Documentation page '" + physPath + "' not found");
-#endif
+
_pageHandler = PageParser.GetCompiledPageInstance (vpath, physPath, context);
-
}
internal IHttpHandler PageHandler {
if (key == "wsdl") GenerateWsdlDocument (context, req.QueryString ["wsdl"]);
else if (key == "schema") GenerateSchema (context, req.QueryString ["schema"]);
-#if !TARGET_JVM //code generation is not supported
else if (key == "code") GenerateCode (context, req.QueryString ["code"]);
-#else
- else if (key == "code") throw new Exception("Code generation is not supported.");
-#endif
else if (key == "disco") GenerateDiscoDocument (context);
else throw new Exception ("This should never happen");
}
void GenerateSchema (HttpContext context, string schemaId)
{
- int di = 0;
- if (schemaId != null && schemaId != "") di = int.Parse (schemaId);
-
+ int di = -1;
+ if (schemaId != null && schemaId != "") {
+ try {
+ di = int.Parse (schemaId);
+ } catch {
+ XmlSchemas xss = GetSchemas ();
+ for (int i = 0; i < xss.Count; i++) {
+ if (xss [i].Id == schemaId) {
+ di = i;
+ break;
+ }
+ }
+ }
+ if (di < 0)
+ throw new InvalidOperationException (String.Format ("HTTP parameter 'schema' needs to specify an Id of a schema in the schemas. {0} points to nowhere.", schemaId));
+ }
context.Response.ContentType = "text/xml; charset=utf-8";
XmlTextWriter xtw = new XmlTextWriter (context.Response.OutputStream, new UTF8Encoding (false));
xtw.Formatting = Formatting.Indented;
GetSchemas() [di].Write (xtw);
}
-#if !TARGET_JVM
void GenerateCode (HttpContext context, string langId)
{
context.Response.ContentType = "text/plain; charset=utf-8";
return provider;
}
-#endif
internal ServiceDescriptionCollection GetDescriptions ()
{