2013-08-05 31 views
7

Ok vì vậy tôi đang lưu trữ một dịch vụ WCF trong một ứng dụng bảng điều khiển.Dịch vụ WCF tự lưu trữ hoạt động với HTTP không phải với HTTPS

tất cả các liên kết được tạo theo chương trình, do đó không có cài đặt cấu hình.

Tôi có một dịch vụ làm việc miễn là tôi sử dụng HttpTransportBindingElement Tuy nhiên ngay sau khi tôi sử dụng HttpsTransportBindingElement sau đó không có gì hoạt động, dịch vụ không hiển thị trong trình duyệt và các ứng dụng khách hàng trả về một 405 (Method Not Allowed) CommunicationException

Tôi đã cố gắng thiết lập một SecurityBindingElement đến số CustomBinding của tôi nhưng tôi không chắc mình nên sử dụng tùy chọn nào.

SecurityBindingElement.CreateCertificateOverTransportBindingElement()

SecurityBindingElement.CreateAnonymousForCertificateBindingElement()

, vv

Mã cho việc tạo ra các máy chủ nằm dưới

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

'ràng buộc' là gì? Ngoài ra cấu hình lập trình của các dịch vụ WCF là khó khăn khó khăn, tại sao không sử dụng tập tin cấu hình? –

+0

@ ta.speot.is bạn có thể giải thích thêm về câu hỏi của mình không? –

+1

@ shankar-damodaran cảm ơn bạn đã chỉnh sửa :) –

Trả lời

6

Tôi đi theo blog này http://blogs.msdn.com/b/james_osbornes_blog/archive/2010/12/10/selfhosting-a-wcf-service-over-https.aspx trong đó nêu bật rằng để cho HTTPS để công việc bạn cần để kết nối cổng với chứng chỉ bạn đang sử dụng.

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();

lần này được thực hiện tất cả những gì làm việc.

liên hệ với tôi nếu có yêu cầu mã ví dụ về thiết lập và định cấu hình máy chủ WCF tự lưu trữ của chúng tôi với các liên kết được lập trình thiết lập. :)

Các vấn đề liên quan