Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法运行WCF https web服务_C#_Visual Studio 2010_Wcf_Ssl_Ssl Certificate - Fatal编程技术网

C# 无法运行WCF https web服务

C# 无法运行WCF https web服务,c#,visual-studio-2010,wcf,ssl,ssl-certificate,C#,Visual Studio 2010,Wcf,Ssl,Ssl Certificate,我已经创建了一个wcfhttp自托管web服务。现在我想把它转换成HTTPS。因此,我遵循以下几点: 跟随页面创建证书,并将其绑定到特定端口。 我使用mmc->console root创建一个证书,并遵循上面链接中写的相同步骤 然后,我运行以下命令将端口与证书绑定: netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677

我已经创建了一个
wcfhttp
自托管web服务。现在我想把它转换成
HTTPS
。因此,我遵循以下几点:

跟随页面创建
证书
,并将其绑定到特定端口。 我使用
mmc
->
console root
创建一个证书,并遵循上面链接中写的相同步骤

然后,我运行以下命令将端口与证书绑定:

netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} 
我根据我的证书更改
certhash
。我还检查了
创建的证书信息
,得到了这个

我还在粘贴项目中编写的代码,以便在绑定端口上运行web服务:

try
  {
    m_running = true;
    private static String m_baseAddress = "https://10.0.0.1:8083";
    WebHttpBinding _binding = new WebHttpBinding();
    _binding.Security.Mode = WebHttpSecurityMode.Transport;
    _binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
    m_serviceHost = new WebServiceHost(typeof(TService), new Uri(m_serviceAddress));
 m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName,"contoso.com");
    ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(TContract), _binding, "");
     m_serviceHost.Open();
    }
     catch(Exception e){ }
每当我重建项目并运行它时。它总是先启动一秒钟,然后停止。我查了一下日志,什么也没有

但是当我去掉这条线的时候

m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName,"contoso.com");

并将
https
替换为
http
。它工作正常。

以下是创建
HTTPS
WCF自托管
web服务的步骤

  • 首先,使用netsh为端口的保留添加名称空间:
    netsh http添加urlacl url=https://127.0.0.1+:8085/用户=所有人

  • 键入以下命令以创建客户端证书:
    makecert-sk RootCA-sky signature-pe-n CN=localhost-r-sr LocalMachine-ss Root MyCA.cer

  • 现在创建服务器证书:
    makecert-sk server-sky exchange-pe-n CN=localhost-ir LocalMachine-is Root-ic MyCA.cer-sr LocalMachine-ss My MyAdHocTestCert.cer

现在,在
\Program files\Microsoft SDK\Windows\v7.0A\Bin
中创建了两个新的
证书
文件,名称分别为
MyCA.cer
MyADHOCTESCERT.cer

打开
server certificate
MyAdHocTestCert.cer
并从
details
选项卡中选择
thumbprint

  • 选择
    thumbprint
    并删除其中的所有空格

  • 现在,使用以下命令将端口与此证书绑定:
    netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}clientcertnegotiation=enable

在哪里

  • ipport:
    主机地址和端口:放置与第一步中选择的地址相同的地址

  • certhash:
    指纹

现在您已经完成了证书和端口绑定。要检查所有内容,请在cmd中写入
netsh http show sslcert
,您会得到如下结果:

现在为WSHTTPbinding编写以下代码:

WebHttpBinding _binding = new WebHttpBinding();
_binding.Security.Mode = WebHttpSecurityMode.Transport;
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
m_serviceHost = new WebServiceHost(typeof(Serviceclass), new Uri("https://127.0.0.1:8085/"));
             m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "611fe7748c5883f8082351744604a8c917608290");
            ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(InstanceClass), _binding, "hello");
            m_serviceHost.Open();

现在创建您的消费者以使用此自托管WS

以下是创建
HTTPS
WCF自托管
web服务的步骤

  • 首先,使用netsh为端口的保留添加名称空间:
    netsh http添加urlacl url=https://127.0.0.1+:8085/用户=所有人

  • 键入以下命令以创建客户端证书:
    makecert-sk RootCA-sky signature-pe-n CN=localhost-r-sr LocalMachine-ss Root MyCA.cer

  • 现在创建服务器证书:
    makecert-sk server-sky exchange-pe-n CN=localhost-ir LocalMachine-is Root-ic MyCA.cer-sr LocalMachine-ss My MyAdHocTestCert.cer

现在,在
\Program files\Microsoft SDK\Windows\v7.0A\Bin
中创建了两个新的
证书
文件,名称分别为
MyCA.cer
MyADHOCTESCERT.cer

打开
server certificate
MyAdHocTestCert.cer
并从
details
选项卡中选择
thumbprint

  • 选择
    thumbprint
    并删除其中的所有空格

  • 现在,使用以下命令将端口与此证书绑定:
    netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}clientcertnegotiation=enable

在哪里

  • ipport:
    主机地址和端口:放置与第一步中选择的地址相同的地址

  • certhash:
    指纹

现在您已经完成了证书和端口绑定。要检查所有内容,请在cmd中写入
netsh http show sslcert
,您会得到如下结果:

现在为WSHTTPbinding编写以下代码:

WebHttpBinding _binding = new WebHttpBinding();
_binding.Security.Mode = WebHttpSecurityMode.Transport;
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
m_serviceHost = new WebServiceHost(typeof(Serviceclass), new Uri("https://127.0.0.1:8085/"));
             m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "611fe7748c5883f8082351744604a8c917608290");
            ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(InstanceClass), _binding, "hello");
            m_serviceHost.Open();

现在创建您的消费者以使用此自托管WS

您仍然使用FindBySubjectName,主题名称为“contoso.com”。这是证书中使用的名称吗?在m_serviceHost.AddServiceEndpoint()中,您正在添加未配置安全模式的新WebHttpBinding()。您可能应该使用以前创建的“绑定”。但我仍然感到惊讶的是,您在启动时没有看到任何错误。另外,如果您继续看到问题,请尝试添加跟踪,看看是否可以从中获得更多信息。@MortenMertner从何处可以看到我的证书名称?您仍在使用FindBySubjectName和“contoso.com”作为主题名称。这是证书中使用的名称吗?在m_serviceHost.AddServiceEndpoint()中,您正在添加未配置安全模式的新WebHttpBinding()。您可能应该使用以前创建的“绑定”。但我仍然感到惊讶的是,您在启动时没有看到任何错误。另外,如果您继续看到问题,请尝试添加跟踪,并查看是否从中获得更多信息。@MortenMertner从何处可以看到我的证书名称?使用SSL创建自托管web服务的整个过程。我犯的错误是,我从错误的点创建证书这是使用SSL创建自托管web服务的整个过程。我犯的错误是t