編程設置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