gpt4 book ai didi

c# - 无法运行 WCF https Web 服务

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:29 26 4
gpt4 key购买 nike

我已经创建了一个 WCF HTTP 自托管网络服务。现在我想将其转换为 HTTPS。所以我遵循了以下几点:

已关注 this页面以创建一个 certificates 并将其绑定(bind)到特定端口。我使用 mmc-> console root 创建证书,并按照上面链接中的相同步骤操作。

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

netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} 

我根据我的证书更改certhash。我还检查了 Created certificate info 并得到了这个。

enter image description here

我还粘贴了我项目中编写的代码,以在绑定(bind)端口上运行 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 self hosted网络服务。

  • 首先,使用netsh为端口添加一个命名空间: netsh http add urlacl url=https://127.0.0.1+:8085/ user=EVERYONE

  • 键入以下命令以创建客户端证书: 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

两个新certificate文件现在在 \Program Files\Microsoft SDKs\Windows\v7.0A\Bin 中创建名称为 MyCA.cerMyAdHocTestCert.cer

打开server certificateMyAdHocTestCert.cer然后选择 thumbprint来自 details标签。

enter image description here

  • 选择 thumbprint并从中删除所有空格。

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

在哪里

  • ipport : host address and port : 放上你在第一步选择的相同地址

  • certhash :指纹

现在您已完成证书和端口绑定(bind)。要检查所有内容,请写 netsh http show sslcert在 cmd 中,你得到了这样的东西:

This is just an exaple

现在为 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

关于c# - 无法运行 WCF https Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com