----- この問題は解決されました。件名とは関係ありません。下部の説明を参照してください -----
Exchange Server の処理を処理するために、COM オブジェクトとして実行している C# dll をまとめました。それが実行する機能の 1 つは、ユーザーのメールボックスを作成します。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;
}
編集: これは、サードパーティの AD 管理ツールに結び付けようとする ASP 実装の問題のようです。スタンドアロンの ASP ページでコードを使用すると、機能します。これには、私の側でさらに調査が必要なようです。
EDIT2: 数時間の調査では、IIS がバインドされた ID を持つ COM+ オブジェクトを処理する方法について、問題を示すものは何も得られませんでした。要求された VBS は次のとおりです。これは機能します。これとまったく同じコードが ASP Classic Web ページで機能します。同じ 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 をステージング ディレクトリとして使用していました。これは、AD アカウントが存在しないため、Exchange に直接アクセスしようとして失敗したことを意味します。Exchange 環境がユーザーの存在を認識するまでスリープするループを追加することで、ハッキングを回避しました。そうではありません...私のお気に入りの解決策ですが、私はそれを取ります。すべての提案をありがとう。