FaultException`1未处理:证书无效?

时间:2012-05-24 21:15:19

标签: c# wcf certificate

构建客户端应用程序以使用受证书保护的WCF。安装了Cert并且可以通过IE访问WSDL,但是一旦它命中CaseExists,应用程序就会抛出“FaultException`1 unended:Invalid Certificate”。有任何想法吗?如果证书无效,那么在IE中使用WSDL时不会出错吗?

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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您收到了类型错误异常(这就是FaultException``1的含义)。据我所知,这些只能由服务器代码显式抛出。如果服务主机检测到证书问题,则应该抛出MessageException

我会检查CaseExists的实际代码,看它是否会抛出FaultException<>类并从那里开始。另外,尝试捕获FaultException并查看Detail属性的对象类型,因为它通常包含有关错误的更多信息。 (具体来说,每个单独的FaultException<T>具体类型都将具有public T Detail属性。)

另外,我认为这与此相关,但您确定需要指定客户端证书吗?这与保护服务(和WSDL)的服务器端证书是分开的。服务器要求客户提供证书是不寻常的(虽然不是闻所未闻),所以我确认你做的是正确的。