编程设置HTTP处理程序,我需要动态实例从控制台应用程序的Web应用程序。通过这个定义,我的意思是我的控制台应用程序包含一个未绑定到IIS/XSP的Web应用程序。在ASP.NET应用程序
Currently,我创建了一个web应用程序到一个临时目录,并将一些伪造的文件复制到它。这是一种特殊的Global.asax映射到我自己的实现的HttpApplication的Web应用程序中使用(我需要做的在应用程序启动一些初始化),然后我伪造映射到我自己的框架类和特殊的.asmx文件动态插件
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?
谢谢
谢谢。我试图搜索,但没有找到它......无论如何它不适用于我的情况,因为我在IIS之外,但我知道该怎么办:) – 2010-11-05 09:28:42