Asp classic COM对象在ASP Classic和VBscript中的行为不同

Asp classic COM对象在ASP Classic和VBscript中的行为不同,asp-classic,vbscript,exchange-server,com+,Asp Classic,Vbscript,Exchange Server,Com+,-----此问题已解决,与主题无关,请参见底部的说明----- 我把一个C#dll放在一起,作为COM对象运行,以处理Exchange服务器处理。它执行的功能之一是创建用户邮箱。我已设置COM+应用程序,因此它以Exchange管理员身份运行 当在VBScript中创建对象并调用该函数时,它会工作。当我在ASP页面上做同样的事情时(使用Server.CreateObject),它什么也不做 在这种情况下,我应该在VBscript和ASP Classic之间寻找什么不同的行为 正在执行的DLL代码

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

我把一个C#dll放在一起,作为COM对象运行,以处理Exchange服务器处理。它执行的功能之一是创建用户邮箱。我已设置COM+应用程序,因此它以Exchange管理员身份运行

当在VBScript中创建对象并调用该函数时,它会工作。当我在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;
}

最终编辑:毫不奇怪,这不是上面代码的问题,而是它周围的代码的问题。我与之集成的应用程序在定期回写AD之前使用AD LDS作为暂存目录。这意味着我尝试直接接触Exchange失败,因为AD帐户不存在。我通过添加一个休眠循环来绕过它,直到Exchange环境识别出该用户的存在。不我最喜欢的解决方案,但我会接受的。谢谢您的建议。

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

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

您忽略了重要的一点,你实际的VBScript代码。你遗漏了重要的一点,你实际的VBScript代码。实际上,考虑到这个组件正在做什么,我认为这不是一个好建议。它允许在高度受限的安全令牌下运行的任何进程使用exchange服务器执行操作。这就是问题的解决方案。我相信他编写的应用程序的目的是允许任何人使用Exchange服务器进行操作。这是一个解决方案,但也是一个危险的解决方案。还有一些允许ASP代码在首先具有所需访问权限的帐户下运行。这将限制只暴露ASP代码正在执行的特定任务。实际上,我已经在这个COM应用程序上取消了该字段的检查。这似乎是我的ASP实现的一个问题,其中涉及到我试图将其绑定到第三方广告管理工具。当我在一个独立的ASP页面中使用代码时,它是有效的。看来这需要我做更多的研究。感谢您的帮助实际上,考虑到这个组件正在做什么,我认为这不是一个好的建议。它允许在高度受限的安全令牌下运行的任何进程使用exchange服务器执行操作。这就是问题的解决方案。我相信他编写的应用程序的目的是允许任何人使用Exchange服务器进行操作。这是一个解决方案,但也是一个危险的解决方案。还有一些允许ASP代码在首先具有所需访问权限的帐户下运行。这将限制只暴露ASP代码正在执行的特定任务。实际上,我已经在这个COM应用程序上取消了该字段的检查。这似乎是我的ASP实现的一个问题,其中涉及到我试图将其绑定到第三方广告管理工具。当我在一个独立的ASP页面中使用代码时,它是有效的。看来这需要我做更多的研究。谢谢你的帮助
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;
}
Dim exch
Set exch = CreateObject("ExchangeMailboxCreator.ExchangeMailboxBuilder")
exch.CreateMailbox("Mailbox\SG\DB", "domaincontroller.domain.com", "TestUserAccount")