MJJ*_*mes 4 c# com vbscript asp-classic
我正在将旧的VBSCript WSC组件重写为更好的C#COM组件.
出于可怕的原因,一个地方的旧组件通过使用传递服务器上下文,IServer
Set objCurr = CreateObject("MTxAS.AppServer.1")
Set objCurrObjCont = objCurr.GetObjectContext()
Set component.servercontext = objCurrObjCont("Server")
Run Code Online (Sandbox Code Playgroud)
这用于做标准 Server.MapPath("/somelocation")
但是,我对.Net COM组件中的操作感到困惑,System.Web.HttpContext.Current.MapPath()因为没有Web上下文而无法正常工作.
我尝试将经典ASP中的上下文传递给COM组件,但我不确定包含哪个引用,所以我可以调用正确的成员,Microsoft.Active X Data Objects 2.7似乎很常见,但这只包括Recordsets等,没什么对于C++ IServer接口,它就像我们一样COM OBJECT.
有谁知道这样做的方法/解决方法?按照这个速度,我想我可能不得不改变组件的行为
将您的C#项目添加到ASP.dll的互操作(您将在\ system32\inetsrv文件夹中找到它.
将一个公共方法添加到由ASP实例化的类中: -
ASPTypeLibrary.ScriptingContext context;
public void OnStartPage(ASPTypeLibrary.ScriptingContext sc)
{
context = sc;
}
Run Code Online (Sandbox Code Playgroud)
现在,当您需要使用MapPath时: -
context.Server.MapPath("...");
Run Code Online (Sandbox Code Playgroud)
注意上下文使您可以访问除服务器之外的请求,响应和会话.OnStartPage是ASP使用的前COM + hack,即使在最新版本中仍然可以使用.ASP执行COM等效的反射(检查COM类类型库信息)以确定公共OnStartPage方法是否可用,如果是,则调用它传递ScriptingContext对象.
没有可用的.NET HttpContext,这个请求必须首先由.NET处理才能存在.无法在"事后"的线程上创建HttpContext.因此,如果您的组件需要与Http对话进行交互,则必须通过ASP上下文对象进行交互,因为ASP是实际处理请求的主机.
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |