2013-08-05 76 views
7

好的,我在託管應用程序中託管了WCF服務。自託管的WCF服務與HTTP協同工作,但不支持HTTPS

所有綁定都是以編程方式創建的,所以沒有配置設置。

我有一個工作服務,只要我使用HttpTransportBindingElement,但是隻要我用HttpsTransportBindingElement再沒有什麼作品,該服務不會在瀏覽器中顯示和客戶端應用程序返回405 (Method Not Allowed) CommunicationException

我已經嘗試設置SecurityBindingElement我的CustomBinding,但我不知道我應該使用哪個選項。

SecurityBindingElement.CreateCertificateOverTransportBindingElement()

SecurityBindingElement.CreateAnonymousForCertificateBindingElement()

爲創建主機的代碼如下

baseAddress = new Uri(string.Format("{0}://{1}", strConnectionType, ConfigurationManager.AppSettings["baseAddress"])); 

      ServiceHost host = new ServiceHost(typeof(IMyService), baseAddress); 

      host.AddServiceEndpoint(typeof(MyService), binding, String.Empty); 

      ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
      smb.HttpsGetEnabled = certificate != null; 
      smb.HttpGetEnabled = certificate == null; 

      host.Description.Behaviors.Add(smb); 

      ServiceDebugBehavior sdb = host.Description.Behaviors.Find<ServiceDebugBehavior>(); 

      if (sdb == null) 
      { 
       host.Description.Behaviors.Add(new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true }); 
      } 
      else 
      { 
       if (!sdb.IncludeExceptionDetailInFaults) 
       { 
        sdb.IncludeExceptionDetailInFaults = true; 
       } 
      } 


      if (certificate != null) 
      { 
       host.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, certificate.Thumbprint); 
      } 
+1

什麼是'綁定'?另外WCF服務的編程配置是該死的難,爲什麼不使用配置文件? –

+0

@ ta.speot.is能否詳細說明您的問題? –

+1

@ shankar-damodaran感謝編輯:) –

回答

6

我跟着這個博客http://blogs.msdn.com/b/james_osbornes_blog/archive/2010/12/10/selfhosting-a-wcf-service-over-https.aspx該報告強調,爲了讓HTTPS來您需要將端口綁定到您正在使用的證書上。

Process bindPortToCertificate = new Process(); bindPortToCertificate.StartInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86), "netsh.exe");

bindPortToCertificate.StartInfo.Arguments = string.Format("http add sslcert ipport=0.0.0.0:{0} certhash={1} appid={{{2}}}", port, certificate.Thumbprint, Guid.NewGuid());

bindPortToCertificate.Start();

bindPortToCertificate.WaitForExit();

一旦這樣做是它的所有工作。

如果有需要的話,請聯繫我我的示例代碼,它以編程方式設置綁定並設置和配置自託管的WCF服務器。 :)