WCF在IIS上失败。系统找不到指定的文件

WCF在IIS上失败。系统找不到指定的文件,wcf,Wcf,我正在尝试创建具有消息安全性的web服务 下面是一个配置: <system.serviceModel> <services> <service name="WCFMessage.Service1" behaviorConfiguration="behaviour1"> <endpoint address="" contract="WCFMessage.IService1" binding="wsHttpBindin

我正在尝试创建具有消息安全性的web服务

下面是一个配置:

  <system.serviceModel>
    <services>
      <service name="WCFMessage.Service1" behaviorConfiguration="behaviour1">
        <endpoint address="" contract="WCFMessage.IService1" binding="wsHttpBinding" bindingConfiguration="binding1" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviour1">
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceMetadata  httpGetEnabled="true"/>
          <serviceCredentials>
            <serviceCertificate findValue="MyCert"
                                x509FindType="FindBySubjectName"
                                storeLocation="LocalMachine"
                                storeName="My"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>

    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="binding1">
          <security mode="Message">
            <message  clientCredentialType="None" negotiateServiceCredential="false"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

它在本地主机上运行良好,但在IIS上,它给了我一个错误:

系统找不到该文件 指定的

堆栈跟踪:

很可能是那个证书 “CN=MyCert”可能没有私钥 能够进行密钥交换或 进程可能没有对的访问权限 私钥

我尝试了这个方法,但仍然出现错误


非常感谢您的帮助。

过去几天我也遇到过类似的情况。我找到了一个我可以接受的解决方法,因此我将与您分享。问题在于IIS应用程序池用户帐户无法访问服务证书私钥文件,或者私钥根本不在其期望的位置

注意:我假设您有自己的证书颁发机构在运行

要解决此问题,请执行以下步骤:

  • 创建将用于IIS应用程序池的新用户帐户
  • 您可以创建新的应用程序池以与此用户标识一起使用,或将此新用户标识分配给DefaultAppPool或您的服务使用的任何应用程序池(在IIS管理器中执行此操作)
  • 然后打开IE,导航到以请求新的服务器身份验证证书。在您的请求中使用相同的CN(“MyCert”)
  • 打开证书颁发机构以颁发请求的证书
  • 再次转到,单击“查看挂起的证书请求的状态”,然后安装证书
  • 现在,您需要对“serviceCertificate”web.config部分进行如下更改:

      <serviceCredentials>   
        <serviceCertificate findValue="MyCert"   
                            x509FindType="FindBySubjectName"   
                            storeLocation="CurrentUser"   
                            storeName="My"/>   
      </serviceCredentials> 
    
    
    
  • 保存、重建服务并对其进行测试,它应该可以正常工作


  • (如果可以使用MMC导出/导入证书功能实现这一点会更容易,但由于某些原因,它的行为与我们预期的不同)

    在过去几天里,我遇到了类似的情况。我找到了一个我可以接受的解决方法,因此我将与您分享。问题在于IIS应用程序池用户帐户无法访问服务证书私钥文件,或者私钥根本不在其期望的位置

    注意:我假设您有自己的证书颁发机构在运行

    要解决此问题,请执行以下步骤:

  • 创建将用于IIS应用程序池的新用户帐户
  • 您可以创建新的应用程序池以与此用户标识一起使用,或将此新用户标识分配给DefaultAppPool或您的服务使用的任何应用程序池(在IIS管理器中执行此操作)
  • 然后打开IE,导航到以请求新的服务器身份验证证书。在您的请求中使用相同的CN(“MyCert”)
  • 打开证书颁发机构以颁发请求的证书
  • 再次转到,单击“查看挂起的证书请求的状态”,然后安装证书
  • 现在,您需要对“serviceCertificate”web.config部分进行如下更改:

      <serviceCredentials>   
        <serviceCertificate findValue="MyCert"   
                            x509FindType="FindBySubjectName"   
                            storeLocation="CurrentUser"   
                            storeName="My"/>   
      </serviceCredentials> 
    
    
    
  • 保存、重建服务并对其进行测试,它应该可以正常工作


  • (如果可以使用MMC导出/导入证书功能实现这一点会更容易,但由于某些原因,其行为与我们预期的不同)

    谢谢。我找到了解决方案,问题和你的一样。谢谢。我找到了解决办法,问题和你的一样。