【发布时间】:2021-07-15 14:16:16
【问题描述】:
在证书和 API 方面,我完全是“新手”,所以我(自然)陷入困境。
我有一个 WCF 服务,我在其中创建了一个像这样的 HttpClient 实例(用于与第三方 API 通信的方法)。
private HttpClient CreateClient(String ClientCertificate)
{
string aAuth = Base64Encode(username + ":" + password);
X509Store myX509Store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
myX509Store.Open(OpenFlags.ReadWrite);
X509Certificate2 myCertificate = myX509Store.Certificates.OfType<X509Certificate2>().FirstOrDefault(cert => cert.GetNameInfo(X509NameType.SimpleName, false) == *the name*);
HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificates.Add(myCertificate);
HttpClient RetVal = new HttpClient(handler);
RetVal.DefaultRequestHeaders.Add("Authorization", "Basic " + aAuth);
return RetVal;
}
当我使用 WCF 测试客户端运行方法时,它按预期工作。 但是,如果我尝试从另一个应用程序运行它,我会在尝试打开商店时收到“拒绝访问”。 (我用 [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 修饰了 API 类以获取 API 中的行号)
the_API.theAPIClient g = new the_API.theAPIClient();
the_API.int_APIReturnObject i = g.DoCaseStatus("some parameters");
两个应用程序都驻留在同一台服务器上。
这两个应用程序都是使用 VS2017 创建的(以管理员身份运行)。
证书在“证书-当前用户->个人->证书”中
由于我的“测试工具”中的异常显示了错误的行号,我假设 API 和工具正在成功通信。
知道我做错了什么吗?
提前致谢
罗杰
【问题讨论】:
-
调用WCF服务需要创建一个WCF客户端,并且客户端和服务必须有相同的绑定:docs.microsoft.com/en-us/dotnet/framework/wcf/…
-
嗨丁,他们已经这样做了:(
-
您可以尝试以管理员身份打开。