如何在两个.NET进程之间整理使用我无法控制的类的调用

本文关键字:调用 控制 之间 进程 NET 两个 | 更新日期: 2023-09-27 17:59:02

我有以下场景。我的C#代码将在两个进程中执行——一个进程是在"本地服务"帐户下运行的IIS进程,另一个进程将在具有更多权限的帐户下运行。两个进程都将运行C#代码,.NET版本至少为3.5。

IIS下的部分包含一组从System.Web.IHttpHandler派生的类,每个类实现接受System.Web.HttpContext参数的IHttpHandler.ProcessRequest()方法。

我不能从IIS部分做任何有用的事情——我需要文件系统访问、DCOM服务器激活,以及其他默认情况下"本地服务"不能做的事情。因此,我想以某种方式将这些ProcessRequest()调用转发到具有更多权限的用户下运行的部分。我需要将对象转发到另一个进程,等待调用完成,然后其他进程将更改对象,我希望在调用方进程端获得这些更改,这样它看起来就像只是一个进程。

我想到了WCF,但我不确定它是否能够处理进程之间的HttpContext编组。AFAIK(可能是错误的)必须用System.Runtime.Serialization.DataContractAttribute[DataContract])标记类型才能进行编组,但HttpContext是用此属性标记的。

我是否可以通过WCF将HttpContext编组到另一个进程并返回,以便被调用者所做的更改对调用者可见?还有什么更好的选择?

如何在两个.NET进程之间整理使用我无法控制的类的调用

我会在IIS中配置一个单独的应用程序池,在具有所需权限的专用帐户下运行,然后配置您的代码以在此应用程序池中执行。然后你就不需要再做这个复杂的过程了。此外,在您的代码中,您可以简单地模拟具有更多特权的用户来执行您的特殊代码序列。

如果您的环境支持该安全模型,那么Dan建议可能是最简单的。

如果没有,那么在HttpContext的使用中是否有一些特殊的东西需要整理对象本身?我可能只会根据HttpContext中包含的信息创建一个可序列化的消息或数据传输对象,并将该对象发送到我的远程进程。远程进程会发回一个响应对象,然后我可以用它来完成IIS端处理的任何步骤。