【发布时间】:2019-04-12 05:22:47
【问题描述】:
我们有一个 WCF 应用程序,它可以作为 Windows 服务或控制台应用程序托管。
此应用程序使用智能卡证书来验证对第三方应用程序的某些请求。我们使用以下逻辑从 Windows 证书存储中获取证书:
public X509Certificate2 GetCertificate(string certificateName)
{
var store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection sel = store.Certificates.Find(X509FindType.FindBySubjectName, certificateName, false);
if (sel.Count == 0)
throw new Exception($"No certificate found with name: {certificateName}");
X509Certificate2 cert = sel.OfType<X509Certificate2>().OrderByDescending(pX => pX.NotAfter).First();
store.Close();
return cert;
}
此代码在 Windows 10 上运行良好,因此当客户有可用的 Windows 10 时,我们将 WCF 作为 Windows 服务托管在我们的生产环境中。
但在 Windows 7 上,当 WCF 应用程序作为 Windows 服务托管时找不到证书。因此,我们通过将 WCF 应用程序托管为控制台应用程序来解决这个问题。我们需要弄清楚为什么它在 Windows 7 上不能作为 Windows 服务工作,尽管如果 WCF 应用程序作为控制台应用程序托管在同一环境中,它确实会找到证书。
【问题讨论】:
标签: c# wcf windows-7 windows-services windows-10