我需要
从控制台应用程序。根据这个定义,我的控制台应用程序包含一个未绑定到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?
谢谢你