我有一些代码可以调用使用 X.509 认证保护的第三方 Web 服务。
如果我直接调用代码(使用单元测试),它可以正常工作。
部署后,此代码将通过 WCF 服务调用。我添加了第二个调用 WCF 服务的单元测试,但是当我调用第三方 Web 服务上的方法时,这会失败并显示一条CryptographicException消息。"Keyset does not exist"
CryptographicException
"Keyset does not exist"
我认为这是因为我的 WCF 服务将尝试使用与我不同的用户来调用第三方 Web 服务。
任何人都可以对这个问题有更多的了解吗?
这可能是证书上的权限问题。
运行单元测试时,您将在自己的用户上下文中执行这些测试,其中(取决于 客户端 证书所在的存储)将有权访问该证书的私钥。
但是,如果您的 WCF 服务托管在 IIS 下,或者作为 Windows 服务,它很可能会在服务帐户(网络服务、本地服务或其他一些受限帐户)下运行。
您需要在私钥上设置适当的权限,以允许该服务帐户访问它。MSDN有详细信息