代码之家  ›  专栏  ›  技术社区  ›  usr-local-ΕΨΗΕΛΩΝ

在ASP.NET应用程序中以编程方式设置HTTP处理程序

  •  2
  • usr-local-ΕΨΗΕΛΩΝ  · 技术社区  · 14 年前

    我需要 从控制台应用程序。根据这个定义,我的控制台应用程序包含一个未绑定到I is/XSP的web应用程序。

    Currently ,我将web应用程序创建到一个临时目录中并复制一些 锻造的 动态插件

                foreach (IPlugin plugin in _target.Plugins)
                {
                    WsdlSkeletonDefinition[] defs = plugin.GetWsdlSkeletons();
                    if (defs != null)
                        foreach (WsdlSkeletonDefinition def in defs)
                        {
                            if (def.SkeletonType == null)
                                throw new LogbusException(string.Format("Plugin {0} declares empty skeleton type",
                                                                        plugin.Name));
                            if (def.SkeletonType.IsAssignableFrom(typeof(System.Web.Services.WebService)))
                                throw new LogbusException(
                                    string.Format("Plugin {0} does not declare a valid WSDL skeleton type", plugin.Name));
    
                            string fname = def.UrlFileName;
                            if (fname.EndsWith(".asmx", false, CultureInfo.InvariantCulture))
                                fname = fname.Substring(0, fname.Length - 5);
    
                            if (!Regex.IsMatch(fname, @"^[a-zA-Z0-9_\.\-%]+$", RegexOptions.CultureInvariant))
                                throw new LogbusException(string.Format(
                                    "Plugin {0} declares invalid WSDL endpoint: {1}",
                                    plugin.Name, def.UrlFileName));
    
                            string wsDeclaration = string.Format(ASMX_TEMPLATE, def.SkeletonType.AssemblyQualifiedName);
    
                            using (
                                StreamWriter sw = new StreamWriter(File.Create(Path.Combine(_physicalPath, fname + ".asmx")),
                                                                   Encoding.Default))
                                sw.Write(wsDeclaration);
    
                            //Copy skeleton asembly if needed
                            CopyAssemblyTo(def.SkeletonType.Assembly, bindir);
                            foreach (AssemblyName dependency in def.SkeletonType.Assembly.GetReferencedAssemblies())
                            {
                                try
                                {
                                    CopyAssemblyTo(Assembly.Load(dependency), bindir);
                                }
                                //Possible broken dependency
                                catch { }
                            }
                        }
                }
    

    我的方法有效

    我知道我可以通过Web.config来控制HTTP处理程序,但我不想为此伪造Web.config。我想创建一个映射,这样我就可以从web服务的url中删除.asmx扩展,并且仍然可以获取它们。

    例如,其中一个默认脚本是“LogbusManagement.asmx”,它必须硬编码到客户机api中,.asmx禁止移植到其他平台,如PHP。我想让“LogbusManagement.asmx”等同于“LogbusManagement”和任何扩展。为此,我可能会使用HttpHandlerFactory。

    我的直接问题是,

    here 其他人:是否有方法以编程方式(可能是从Global.asax)为web应用程序设置IHttpHandlers或IHttpHandlerFactories?

    谢谢你

    1 回复  |  直到 14 年前
        1
  •  0
  •   Community noseratio    7 年前

    这个问题已经在stackoverflow中得到了回答:

    Any way to add HttpHandler programatically in .NET?