如何使用HTTPS访问WCF WebServiceHost端点?

时间:2013-02-18 10:04:16

标签: c# visual-studio-2010 wcf visual-studio wcf-binding

我已成功创建WCF self-hosted HTTP网络服务。我使用webserviceHost来创建此服务。我没有在web.config文件中进行任何更改。这是我的代码:

Instance.cs:

 [OperationContract, WebInvoke(Method = "GET", UriTemplate = "/getstatus/", ResponseFormat = WebMessageFormat.Json)]
    bool getstatus();

service.cs:

 public bool getstatus()
    {
        return true;
    }

BindingWS.cs

 void bindservice()
    {
        try
        {
            m_running = true;
            // Start the host
            m_serviceHost = new WebServiceHost(typeof(Swiper.cs), new Uri(http://localhost:8083"));
            ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(Instace.cs), new WebHttpBinding(), "");
            m_serviceHost.Open();
            while (m_running)
            {
                // Wait until thread is stopped
                Thread.Sleep(SleepTime);
            }

            // Stop the host
            m_serviceHost.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            if (m_serviceHost != null)
            {
                m_serviceHost.Close();
            }
        }
    }

以上代码可以在WCF运行Htpp。但我如何将其转换为HTTPS。我跟随这么多博客但没有得到任何东西。有可能吗?

1 个答案:

答案 0 :(得分:1)

基本上,您需要根据您在主机中使用的端口号手动注册证书。以下是有关如何实现该目标的一些细节

http://msdn.microsoft.com/en-us/library/ms733791.aspx

更新21/2/13:

如果您已经按照上述说明为域名注册了证书,那么您应该可以通过对上述代码进行一些调整来实现这一目标。以下是使用控制台应用程序作为主机的一些示例代码。 HTH。

    using (var serviceHost = new WebServiceHost(typeof(Swiper), new Uri("https://localhost:8083")))
        {
            var secureWebHttpBinding = new WebHttpBinding(WebHttpSecurityMode.Transport) { Name = "secureHttpWeb" };
            serviceHost.AddServiceEndpoint(typeof(ISwiper), secureWebHttpBinding, "");
            serviceHost.Open();
            Console.WriteLine("Service running...");
            Console.WriteLine("Press any key to stop service.");
            Console.ReadLine();

            // Stop the host
            serviceHost.Close();
        }