gpt4 book ai didi

c# - COM 组件中的 Server.MapPath

转载 作者:太空狗 更新时间:2023-10-30 00:17:37 26 4
gpt4 key购买 nike

我正在将旧的 VBScript WSC 组件重写为更好的 C# COM 组件。

由于一个可怕的原因,一个地方的旧组件通过使用传递给服务器上下文,IServer

Set objCurr = CreateObject("MTxAS.AppServer.1")
Set objCurrObjCont = objCurr.GetObjectContext()
Set component.servercontext = objCurrObjCont("Server")

然后使用它来执行标准的 Server.MapPath("/somelocation")

但是我对在 .Net COM 组件中做什么感到困惑,System.Web.HttpContext.Current.MapPath() 没有按预期工作,因为没有 Web 上下文。

我尝试将上下文从经典 ASP 传递到 COM 组件,但我不确定要包含哪个引用以便我可以调用正确的成员,Microsoft.Active X Data Objects 2.7 似乎很常见,但这只包括 Recordsets等等,对于 C++ IServer 接口(interface)没有任何意义,所以它作为 COM OBJECT 出现。

有谁知道执行此操作/解决方法的方法吗?按照这个速度,我想我可能必须改变组件的行为

最佳答案

将 ASP.dll 互操作添加到您的 C# 项目(您将在\system32\inetsrv 文件夹中找到它。

将公共(public)方法添加到由 ASP 实例化的类中:-

 ASPTypeLibrary.ScriptingContext context;
public void OnStartPage(ASPTypeLibrary.ScriptingContext sc)
{
context = sc;
}

现在,当您需要 MapPath 时,请使用:-

 context.Server.MapPath("...");

除了服务器之外,注释上下文还可以让您访问请求、响应和 session 。 OnStartPage 是 ASP 使用的 COM+ 之前的 hack,即使在最新版本中也仍然有效。 ASP 执行 COM 等效反射(检查 COM 类类型库信息)以确定公共(public) OnStartPage 方法是否可用,如果可用,则调用它并传递 ScriptingContext 对象。

没有可用的 .NET HttpContext,请求必须首先由 .NET 处理才能存在。 HttpContext 不能按原样“事后”在线程上创建。因此,如果您的组件需要与 Http 对话进行交互,则必须通过 ASP 上下文对象进行交互,因为 ASP 是实际处理请求的主机。

关于c# - COM 组件中的 Server.MapPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/911271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com