프로그래밍 방식으로 바인딩을 기본 웹 사이트에 추가하려고 시도하지만 Microsoft.Web.Administration dll에서 null 참조 예외가 계속 발생합니다. 원래 바인딩과 함께 인증서를 할당하려고했습니다. https 바인딩을 추가 할 때 Microsoft.Web.Administration의 NullReferenceException이 발생합니다.
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();
이
가 제대로 내게는, 그것이 null가 아닌 원하는 인증서를주고, 내가 기대하는 정보를 가지고 : 나는이와 원하는 인증서를 조회 할 수 있었다.Site site = GetSite("Default Web Site");
var binding = site.Bindings.Add("*:443", certificate.GetCertHash(), "https");
내 변수 나 샘플 코드의 다른 항목 중 누구도 널 내가 여기 널을 받고 있어요 이유에 혼란 스러워요 (20 바이트 배열을 반환 GetCertHash 포함) 없음을 감안할 때.
site.Bindings.Add("*:443", "https");
그리고 난 여전히 같은 널 심판 스택 얻을 : 여기
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:
가 selfssl 명령 줄 인수와 함께 문제를 demonstartes 전체 테스트 응용 프로그램입니다 난 다음 과부하를 시도 I 샘플 인증서 생성하는데 사용 :
selfssl.exe를/T/N : CN = TEST_SELF_SIGNED/K : 512/V : 9999/Q
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();
}
}
}
내 기지를 충당하기 위해 Iis가 설치되어 수동으로 인증서를 할당하면됩니다.