構建客戶端應用程序以使用受到證書保護的WCF。 Cert已經安裝並且可以通過IE訪問WSDL,但是一旦它遇到CaseExists,應用程序就會拋出一個「FaultException`1被取消:無效證書」。有任何想法嗎?如果證書無效,那麼在IE中敲入WSDL時不會錯誤?FaultException`1未處理:無效的證書?
using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Security;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel.Description;
using ConsoleApplication1.ServiceReference1;
using System.Diagnostics;
using System.ServiceModel.Channels;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// binding
BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
// endpoint
EndpointAddress ea = new EndpointAddress(
"https://cut out endpoint.svc");
// fire it up
EBondingClient client = new EBondingClient(b, ea);
// toss in cert
client.ClientCredentials.Peer.PeerAuthentication.CertificateValidationMode =
System.ServiceModel.Security.X509CertificateValidationMode.None;
client.ClientCredentials.ClientCertificate.SetCertificate(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindBySubjectName,
"cut.out.cert.name");
// call
Console.WriteLine(client.CaseExists("hello world"));
client.Close();
Console.ReadLine();
}
}
}
WSDL不適用與實際服務相同的安全性。這樣消費者就可以訪問服務的模式,而不必知道如何進行身份驗證。 – mellamokb
在這個前提下,我會同意你的意見;但是構建這個wsdl/wcf的人也擁有保護wsdl的證書。這是我第一次處理wcf,並且在這之前只通過javascript在類中處理傳統的soap/wsdl的東西。我的第一反應是「爲什麼你需要安裝的證書才能訪問wsdl?」 - 有可能證書對於訪問WSDL而不是端點有效嗎? –