代码之家  ›  专栏  ›  技术社区  ›  reapen

WCF服务使用https自托管

  •  2
  • reapen  · 技术社区  · 11 年前

    目前,在我们的一台客户端机器中,有一个Wcf服务作为windows服务托管,实际上目前它正在使用普通的http调用。由于我们需要使用https而不是http,因此我们修改了app.config,但在启动服务后,https url不起作用。然后我们尝试使用 netsh http add urlacl url=https://+:18732/Peripheral/ user=Everyone 。然后我们再次重新启动该服务-它无法访问https url。

    我们在URl浏览器中收到错误。请确保启用了TLS和SSL协议。

    这与任何证书颁发有关吗?如果是这样,我们如何才能解决这个问题?

    web.config提供如下:-

    <system.serviceModel>
    <standardEndpoints />
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
      <bindings>
        <basicHttpBinding>
        <binding name ="soapBinding">
        <security mode="Transport">
        <transport clientCredentialType="None"/>
        </security>
        </binding>
        </basicHttpBinding>
        <webHttpBinding>
     <binding name="Bind1" crossDomainScriptAccessEnabled="true">
    <security mode="Transport">
     <transport clientCredentialType="None"/>
    </security>
    </binding>
    </webHttpBinding>  
        </bindings>
        <services>
          <service name="Peripheral.Server.Impl.PeripheralServiceImpl" behaviorConfiguration="SvcBhvr">
    <host>
    <baseAddresses>
      <add baseAddress="https://localhost:18732/Peripheral/" />
      </baseAddresses>
    </host>
    <endpoint address="https://localhost:18732/Peripheral/" binding="webHttpBinding" behaviorConfiguration="EndPBhvr" bindingConfiguration="Bind1" 
    contract="Peripheral.Server.Contract.IPeripheralService">
     <!--<identity>
        <dns value="localhost" />
      </identity>-->
    </endpoint>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
    </service>
    </services>
    <behaviors>
    <endpointBehaviors>
    <behavior name="EndPBhvr">
    <webHttp /> 
    </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
    <behavior name="SvcBhvr">
    <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false" />
    <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    </serviceBehaviors>
    </behaviors>
    </system.serviceModel>
    

    有人知道如何解决这个问题,以及我们需要做什么才能从windows服务中以https的形式访问url吗?

    1 回复  |  直到 11 年前
        1
  •  6
  •   Community Dai    4 年前

    您可能还需要使用netsh或HttpConfig工具将ssl证书绑定到特定的端口号,具体取决于操作系统版本。可以找到详细说明 here

    在您的情况下,可能是:

    netsh http add sslcert ipport=0.0.0.0:18732 certhash=<certhash> appid={<guid>} clientcertnegotiation=enable
    

    哪里

    certhash=您的证书指纹(X509Certificate2.Thumbprint)

    appid=可能只是Guid.NewId()