COM对象在ASP Classic和VBscript中的表现不同

时间:2012-04-17 14:30:30

标签: asp-classic vbscript exchange-server com+

-----这个问题已经解决,与主题无关,请参阅底部的解释-----

我把一个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;
}

和ExecuteCmdlet

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实现的问题,这涉及到我试图将其绑定到第三方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 LDS作为临时目录,然后定期写回AD。这意味着我尝试直接触摸Exchange失败,因为AD帐户不存在。我通过添加一个循环进入睡眠状态来破解它,直到Exchange环境识别出用户存在。不是......我最喜欢的解决方案,但我会接受它。感谢您的所有建议。

1 个答案:

答案 0 :(得分:1)

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