私はライセンスを確認するためのサービスを作成しています。このサービスの一環として、サードパーティのDLLを使用する必要があります。このサービス(WCFサービス、C#)は、クラウドサービスとして青空でホストされています。展開後、私はクラウドサービスのVMに手動でDLLを登録し、サードパーティのDLLを使用するIISで正しい権利をサービスに与える必要があります。AzureクラウドサービスでサードパーティのDLLを使用する方法
IISでこの設定をスクリプト/コードで実行します。クラウドがVMを再起動して更新を再開すると、設定が失われ、再度手動で設定する必要があるためです。
DLL自体の登録はスクリプト(registerCOM.cmd)によって行われ、servicedefinition.csdefの一部です。このスクリプトは、実行可能ファイルを起動し、サードパーティのDLLを登録
start "" "lpregister410.EXE"
:
<Startup>
<Task commandLine="RegisterCOM.cmd" executionContext="elevated" taskType="simple" />
</Startup>
は、このスクリプトは、一つのエントリが含まれています。これまでのすべてが動作します
しかし、スクリプトでDLLを使用するサービスを取得できません。つまり、サービスを稼働させることができますが、手動でIISを設定する必要があります。私はこの場合、アプリケーションプール内のこのアプリケーションのIDを「ネットワーク」から「LocalSystem」に設定する必要があります。
私はIISのエキスパートではありませんが、このオプションが何度も選択されていて、ソリューションが動作するのを見て、これをpowershellスクリプトに作成しようとしましたが、これはcmd(ConfigureIIS.cmd)
<Startup>
<Task commandLine="RegisterCOM.cmd" executionContext="elevated" taskType="simple" />
<Task commandLine="ConfigureIIS.cmd" executionContext="elevated" taskType="simple" />
</Startup>
このConfigureIIS.cmdスクリプトが含まれています
Import-Module WebAdministration
$applicationPools = Get-ChildItem IIS:\AppPools
foreach($pool in $applicationPools)
{
If($pool.name.length -gt 32)
{
$pool.processModel.identityType = 0
$pool | Set-Item
$bool = $true
}
}
:
PowerShell.exe -NoProfile -ExecutionPolicy Unrestricted -Command "& '%~dpn0.ps1'"
PowerShellスクリプトは、このありません
このスクリプトの背後にあるアイデアは、AzureがサービスにランダムなGuidの名前を付けることです。このGUIDには少なくとも32文字が含まれています。見つかった場合、identityTypeを0(LocalSytem)に変更してください(1つのサービスのみがホストされています)。
問題があります。 Cloudservices VMでこのスクリプトマニュアルを実行すると、問題はありません。正しく動作し、IISが正しく設定されています。しかし、パブリッシュを実行すると、IISは設定されません。 (私は、サービスがまだアプリケーションプールに追加されていないので、それは正しい仮定ですか?)私は、アプリケーションからスクリプトを発射するとき、それは私が十分な権限を持っていない私に指示(私はcloudserviceは、デフォルトの「管理者」であると考えられる)
私はこのようなコードでは、上記のすべて行うと:
{
ServerManager serverManager = new ServerManager();
sb.Append("ServerManager Created");
ApplicationPoolCollection applicationPools = serverManager.ApplicationPools;
sb.Append("Number of pools detected: " + applicationPools.Count.ToString());
foreach (ApplicationPool pool in applicationPools)
{
sb.Append(pool.Name);
if (pool.Name.Length > 32) {
sb.Append(pool.Name + " has been found");
pool.ProcessModel.IdentityType = ProcessModelIdentityType.LocalSystem;
sb.Append(pool.Name + " has identity been changed to " + pool.ProcessModel.IdentityType.ToString() + ", ");
sb.Append("Trying to commit changes, ");
serverManager.CommitChanges();
sb.Append("Changes Committed ! ");
}
}
}
それは
serverManager.CommitChanges();
で変更を保存するときだから、そのために残念tekstと説明の多くは、ですが、私は誰かが私に正しい方向にプッシュを与えることができることを願ってくれ「ではない十分な権限」を与えます。主な問題は、クラウドサービスとの手動による対話なしで、このサードパーティのDLLをどのように使用できるかです。documentationによれば
あなたは私の一日行わ。それは今、完璧に機能します。私が提供したコードはRoleEntryPoint.OnStartメソッドにありましたが、まだエラーが発生します。スクリプトとtaskTypeの変更がトリックでした!どうもありがとうございました ! – Martijn
あなたは歓迎です:-) –