我有一个具有消息安全性的 WCF 服务,并且我正在尝试将客户端连接到它。
使用由 Visual Studio 中的“添加服务引用”自动生成的默认 Web.Config 设置,连接效果非常好,设置如下:
端点:
<endpoint address="http://localhost:56017/services/MaternumPdfService.svc/soap"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMaternumPdfService"
contract="MaternumPdfServiceReference.IMaternumPdfService" name="WSHttpBinding_IMaternumPdfService">
<identity>
<certificate encodedValue="BASE64 IS HERE" />
</identity>
</endpoint>
捆绑:
<binding name="WSHttpBinding_IMaternumPdfService" maxReceivedMessageSize="2147483647">
<security>
<message clientCredentialType="UserName" negotiateServiceCredential="false"
establishSecurityContext="false" />
</security>
<readerQuotas maxStringContentLength="2147483647" maxDepth="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
这可以顺利进行:
using (MaternumPdfServiceClient pdfService = new MaternumPdfServiceClient("WSHttpBinding_IMaternumPdfService"))
{
pdfService.ClientCredentials.UserName.UserName = "sample";
pdfService.ClientCredentials.UserName.Password = "sample";
pdfService.Open();
if (!pdfService.State.Equals(CommunicationState.Opened))
{
return null;
}
MemoryStream ms = new MemoryStream();
pdfService.GetMaternumPdf(pdftype,params).CopyTo(ms);
}
我以为我正在 C# 版本和使用 Web.Config 设置的版本之间构建完全等效的代码,但与第二个版本连接会导致异常:
'An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.'
具有以下内部异常:
An error occurred when verifying security for the message.
不是特别清楚...这似乎与消息安全有关,但与 Web.Config 的连接工作得很好,这让我相信我没有在正确的类中设置证书。
我调查过:
服务器和客户端都是本地主机,所以不应该是时间不匹配
凭据正确,因为 Web.Config 版本使用相同的凭据并且验证良好
我使用的是 HTTP,而不是 HTTPS
使用 IISExpress,而不是 IIS
就是这样。我认为我将客户端证书设置在错误的位置,如果不是通过 ClientCredentials.ClientCertificate.Certificate 或端点的身份,我应该如何设置它?
扬帆大鱼
德玛西亚99
相关分类