1

-----此问题已解决,与主题无关,请参阅底部说明 -----

我已经将一个 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 环境识别出用户存在来绕过它。不是......我最喜欢的解决方案,但我会接受。感谢所有的建议。

4

1 回答 1

1

在组件服务的“安全”选项卡上,您需要取消选中“对此应用程序执行访问检查”。

于 2012-04-17T15:32:18.840 回答