-----此问题已解决,与主题无关,请参阅底部说明 -----
我已经将一个 C# dll 放在一起作为 COM 对象运行以处理 Exchange Server 处理。它执行的功能之一是创建用户邮箱。我已经设置了一个 COM+ 应用程序,因此它以 Exchange 管理员的身份运行。
当在 VBScript 中 CreateObject 并调用该函数时,它可以工作。当我在 ASP 页面(使用 Server.CreateObject)中做同样的事情时,它什么也不做。
在这种情况下,我应该在 VBscript 和 ASP Classic 之间寻找哪些不同的行为?
正在执行的 DLL 代码:
public void CreateMailbox(String database, String dc, String upn)
{
String retval = String.Empty;
Dictionary<String, object> args = new Dictionary<string, object>();
args.Add("Identity", upn);
args.Add("Database", database);
args.Add("DomainController", dc);
Collection<PSObject> result = ExecuteCmdlet("Enable-Mailbox", args);
return;
}
并执行Cmdlet
private Collection<PSObject> ExecuteCmdlet(String cmdlet, Dictionary<String,object> arguments)
{
RunspaceConfiguration rsConf = RunspaceConfiguration.Create();
PSSnapInException psException = null;
PSSnapInInfo psInfo = rsConf.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out psException);
Runspace rs = RunspaceFactory.CreateRunspace(rsConf);
rs.Open();
Pipeline pipe = rs.CreatePipeline();
Command psCmd = new Command(cmdlet);
foreach (KeyValuePair<String,object> arg in arguments)
{
psCmd.Parameters.Add(arg.Key, arg.Value);
}
pipe.Commands.Add(psCmd);
Collection<PSObject> retVal = pipe.Invoke();
rs.Close();
return retVal;
}
编辑:这似乎是我的 ASP 实现的一个问题,这涉及到我试图将它与第 3 方 AD 管理工具联系起来。当我在独立的 ASP 页面中使用代码时,它可以工作。似乎这需要我做更多的研究。
EDIT2:几个小时的研究在 IIS 处理具有以任何方式表明问题的绑定标识的 COM+ 对象的方式上没有产生任何结果。请求的 VBS 如下。这行得通。这个完全相同的代码在 ASP Classic 网页中工作。当我在同一个 vdir 中的不同 Web 应用程序中运行完全相同的代码时,它无法创建邮箱。有问题的应用程序是用 ASP Classic 编写的 Active Directory 的 MVC 前端。
Dim exch
Set exch = CreateObject("ExchangeMailboxCreator.ExchangeMailboxBuilder")
exch.CreateMailbox("Mailbox\SG\DB", "domaincontroller.domain.com", "TestUserAccount")
最终编辑:不出所料,这不是上面代码的问题,而是它周围的代码。我正在与之集成的应用程序在定期写回 AD 之前使用 AD LDS 作为暂存目录。这意味着我直接接触 Exchange 的尝试失败了,因为 AD 帐户不存在。我通过添加一个循环休眠直到 Exchange 环境识别出用户存在来绕过它。不是......我最喜欢的解决方案,但我会接受。感谢所有的建议。