为什么我在WCF服务中找不到证书?

时间:2015-11-17 16:36:56

标签: c# xml wcf wcf-endpoint endpointbehavior

我正在尝试使用WCF开发服务,但我找不到我创建的证书,此证书位于TrustedPeple文件夹下。到目前为止,这是我写的一大堆代码:

client.ClientCredentials.ServiceCertificate.SetDefaultCertificate(
            StoreLocation.CurrentUser,
            StoreName.My,
            X509FindType.FindBySubjectName,
            "WCfClient");

从上面的代码中可以看出,我还尝试手动设置证书特征,但我仍然找不到它。

另外,我会发布我的conif xml文件的一部分以便更好地理解:

<services>

      <service 
        name="XMLServices.CriDecServices.CriDecService"
        behaviorConfiguration="wsHttpCertificateBehavior">
        <endpoint name="CriDecPoint"
          address=""
          binding="wsHttpBinding"
          bindingConfiguration="wsHttpEndpointBinding"
          contract="XMLContracts.ServiceContracts.ICriDecService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8733/XMLServices/CriDecServices/CriDecService" />
          </baseAddresses>
        </host>
        </service>


      <service
        name="XMLServices.UtenteServices.UtenteService"
        behaviorConfiguration="wsHttpCertificateBehavior">
        <endpoint
          name="UserPoint"
          address="" 
          binding="wsHttpBinding"
          bindingConfiguration="wsHttpEndpointBinding"
          contract="XMLContracts.ServiceContracts.IUtenteService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8766/XMLServices/UtenteServices/UtenteService" />
          </baseAddresses>
        </host>
      </service>
      </services>

这是我得到的例外情况:

“未提供客户端证书。在ClientCredentials中指定客户端证书。”

任何人都可以帮助我理解为什么我似乎无法找到我的证书吗?感谢

1 个答案:

答案 0 :(得分:0)

如果您在此处查看,您会发现您尝试使用的商店不是来自可信人员文件夹的商店,而是来自个人文件夹的商店

你应该使用

StoreName.TrustedPeople

在此处查看详细信息https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename(v=vs.110).asp

也很可能你需要StoreLocation.LocalMachine。