NullReferenceException in Microsoft.Web.Administration beim Hinzufügen einer https-Bindung

Ich versuche, meiner Standardwebsite programmgesteuert eine Bindung hinzuzufügen. Es wird jedoch durchweg eine Nullreferenzausnahme in der Microsoft.Web.Administration-DLL angezeigt. Ursprünglich wollte ich der Bindung ein Zertifikat beifügen. Ich konnte das gewünschte Zertifikat folgendermaßen abfragen:

<code>var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

var certificate = store.Certificates.Find(X509FindType.FindByIssuerName,
                                                  "TEST_SELF_SIGNED", true)
                                                  .OfType<X509Certificate>().FirstOrDefault();
</code>

Dies gab mir das Zertifikat, das ich wollte, es war nicht null und hatte die Informationen, die ich erwartet hatte.

<code>Site site = GetSite("Default Web Site");
var binding = site.Bindings.Add("*:443", certificate.GetCertHash(), "https");
</code>

Da keine meiner Variablen oder andere Elemente im Beispielcode null sind (einschließlich GetCertHash, das ein 20-Byte-Array zurückgibt), bin ich verwirrt, warum ich hier eine Null erhalte. Ich habe sogar die folgende Überlastung versucht:

<code>site.Bindings.Add("*:443", "https");
</code>

Und ich bekomme immer noch den gleichen Null-Ref-Stack:

System.NullReferenceException was unhandled
  Message=Object reference not set to an instance of an object.
  Source=Microsoft.Web.Administration
  StackTrace:
       at Microsoft.Web.Administration.Configuration.SetDirty()
       at Microsoft.Web.Administration.ConfigurationElement.SetDirty()
       at Microsoft.Web.Administration.ConfigurationElement.SetAttributeValue(String attributeName, Object value)
       at Microsoft.Web.Administration.Binding.SetBindingProperty(String attributeName, String value)
       at Microsoft.Web.Administration.BindingCollection.Add(String bindingInformation, Byte[] certificateHash, String certificateStoreName)
       at TestApp.Program.Main(String[] args) in C:\Projects\Cube\trunk\src\AutoUpdate\TestApp\Program.cs:line 33
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

Hier ist eine vollständige Test-App, die das Problem zusammen mit den selfssl-Befehlszeilenargumenten demonstriert, die ich zum Generieren des Beispielzertifikats verwendet habe:

selfssl.exe / T / N: CN = TEST_SELF_SIGNED / K: 512 / V: 9999 / Q

<code>class Program
{
    static void Main(string[] args)
    {

        using (ServerManager manager = new ServerManager())
        {
            var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
            store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

            var certificate = store.Certificates.Find(X509FindType.FindByIssuerName, "TEST_SELF_SIGNED", true).OfType<X509Certificate>().FirstOrDefault();

            Site site = GetSite("Default Web Site");
            site.Bindings.Add("*:443", certificate.GetCertHash(), store.Name);

            store.Close();

            manager.CommitChanges();
        }
    }

    public static Site GetSite(string siteName)
    {
        using (var serverManager = new ServerManager())
        {
            return serverManager.Sites.Where(p => p.Name.ToLower() == siteName.ToLower()).FirstOrDefault();
        }
    }
}
</code>

Um meine Grundlagen abzudecken, ist Iis installiert und die manuelle Zuweisung des Zertifikats funktioniert einwandfrei.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage