-----这个问题已经解决,与主题无关,请参阅底部的解释-----
我把一个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环境识别出用户存在。不是......我最喜欢的解决方案,但我会接受它。感谢您的所有建议。
答案 0 :(得分:1)
在组件服务的“安全”选项卡上,您需要取消选中“对此应用程序执行访问检查”。