リモートsrver上のIISにバインディングを追加できるサービスを作成しようとしています。私はMicrosoft.Web.Administrationを使用しています。 バインディングを追加するには私のコードは次のようになります。.Net CoreおよびMicrosoft.Web.Administration
public static bool AddSiteBinding(string siteName, string ipAddress, string tcpPort, string hostHeader, string protocol)
{
try
{
if (string.IsNullOrEmpty(siteName))
{
throw new ArgumentNullException("siteName", "AddSiteBinding: siteName is null or empty.");
}
//get the server manager instance
using (ServerManager mgr = ServerManager.OpenRemote(@"\\Qasql01\c$\Windows\System32\inetsrv\config\applicationHost.config"))
//using (ServerManager mgr = new ServerManager())
{
SiteCollection sites = mgr.Sites;
Site site = mgr.Sites[siteName];
if (site != null)
{
string bind = ipAddress + ":" + tcpPort + ":" + hostHeader;
//check the binding exists or not
foreach (Binding b in site.Bindings)
{
if (b.Protocol == protocol && b.BindingInformation == bind)
{
throw new Exception("A binding with the same ip, port and host header already exists.");
}
}
Binding newBinding = site.Bindings.CreateElement();
newBinding.Protocol = protocol;
newBinding.BindingInformation = bind;
site.Bindings.Add(newBinding);
mgr.CommitChanges();
return true;
}
else
throw new Exception("Site: " + siteName + " does not exist.");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
}
問題は、それがリモートサーバーに対して実行だとき(ローカルで正常に動作します)このコードがObject reference not set to an instance of an object.
エラーで吹くことです。この場合のリモートサーバーは、Windows Server 2012上のIIS 8.5です。私はすべての幸運なしに見つけることができるすべてのソリューションを試しました。私は管理者として実行されているVS 2017からこのコードを実行しています。サーバーをオフにファイアウォールを回さIIS管理ツールは、サーバー
- とahaadmin
- で特定のエンドポイントを追加しました:ここに私が試したものです。 UACでOFF
- 確認済み私はMicrosoft.Web.Administration DLL
- の正しいバージョンを持っていることを、私は、IPアドレスを入力し、サーバー上の設定、およびサーバー名へのリモートパスを試してみました。
IISのバージョンが異なるため、私のローカルマシンで自分のソリューションをテストできません。最終的には、Windows 10では使用できないIIS機能である「中央証明書ストア」にSSL証明書を追加するためのコードを記述します。実際には「OpenRemote」が必要ですが、そうではないようです。 MicrosoftからServerManager.OpenRemote()メソッドの例はありません。私が見つけた例は、単に動作しません(ほとんどのIIS7参照)。私は、OpenRemoteメソッドがIIS7を超えるものでは決してテストされていないと考え始めています。 ServerManager.OpenRemote()をIIS 8.5に対して正常に使用している人はいますか?
MWAはどれですか? NuGetバージョンは使用できません。 –
ヌル参照例外ではどの行が爆発するのですか? – virusstorm
@virusstorm 'mgr'をインスタンス化するusingステートメントの直後の行。もちろん、mgrがnullのため、 'mgr.Sites'にアクセスすることはできません。それは決して作成されません。 @Lex Li私は、Microsoftによると.Netコアと互換性があり、動作するNuGetバージョンのバージョン[11.0](https://www.nuget.org/packages/Microsoft.Web.Administration/)を使用しています。 2016年10月、マイクロソフトはMWAを引き継ぎ、公式のNuGetパッケージにしました。だから今はMicrosoftによって所有され維持されている。 – user2033791