0

我有一个托管在 IIS 上的 WCF 服务。该服务使用 wsHttpBinding X509 认证认证,一切正常。现在我需要从 Windows 2000 机器访问该服务,问题是 Framework 2.0 不支持 wsHttpBinding 身份验证,而只支持 basicHttpBinding。

我的问题:

  • 是否可以在 SAME 服务(也称为 IIS 应用程序)中公开两个不同的端点(wsHttpBinding ssl X509 身份验证和匿名 basicHttpBinding)?

  • 是否可以为 Windows 2000 编写客户端应用程序以通过 wsHttpBinding X509 身份验证连接到 WCF 服务(接受任何语言)

        <behaviors>
          <serviceBehaviors>
            <behavior name="CertBehavior">
              <serviceMetadata httpsGetEnabled="False"/>
              <serviceCredentials>
                <serviceCertificate findValue="CertServices" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
                <clientCertificate>
                  <authentication certificateValidationMode="PeerTrust"/>
                </clientCertificate>
              </serviceCredentials>
            </behavior>
            <behavior name="AnonBehavior">
              <serviceMetadata httpGetEnabled="True"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
      <services>
          <service name="Server.Service1" behaviorConfiguration="CertBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://192.168.1.112:8732/Service"/>
                <add baseAddress="https://192.168.1.112/Service"/>
              </baseAddresses>
            </host>
    
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="CertBinding" contract="Server.IService1"/>
          </service>
        </services>
    

///////////////////////////////////////// //////////////////////////////////

我已经尝试过这个配置:

        <behaviors>
          <endpointBehaviors>
            <behavior name="basicHttpBehavior"/>
            <behavior name="certWsBehavior">
              <clientCredentials>
                <clientCertificate findValue="Services" storeLocation="LocalMachine" x509FindType="FindBySubjectName" /> 
                <serviceCertificate>
                  <defaultCertificate findValue="Services" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
                  <authentication certificateValidationMode="PeerTrust" />
                </serviceCertificate>
              </clientCredentials>
            </behavior>
          </endpointBehaviors>
        </behaviors>

        <services>
          <service name="Server.Service1">
            <clear />

            <endpoint address="" behaviorConfiguration="certWsBehavior" binding="wsHttpBinding"  contract="Server.IService1">
            </endpoint>

            <!--endpoint address="/basic" binding="basicHttpBinding" bindingConfiguration="BasicAnonBinding" contract="Server.IService1" /-->

            <host>
              <baseAddresses>
                <add baseAddress="http://192.168.1.112:8732/PcrService" />
                <add baseAddress="https://192.168.1.112/PcrService" />
              </baseAddresses>
            </host>
          </service>
        </services>

非常感谢,里卡多

4

1 回答 1

0

是否可以在 SAME 服务(也称为 IIS 应用程序)中公开两个不同的端点(wsHttpBinding ssl X509 身份验证和匿名 basicHttpBinding)?

是的,您可以为同一服务拥有多个端点:

<service name="MyApp.MyService">
    <endpoint 
        address="/ws" 
        binding="wsHttpBinding" 
        contract="MyApp.IMyService" 
    />

    <endpoint 
        address="/basic" 
        binding="basicHttpBinding" 
        contract="MyApp.IMyService" 
    />
</service>

/basic现在您可以从您的 Windows 2000 客户端连接到端点。

是否可以为 Windows 2000 编写客户端应用程序以通过 wsHttpBinding X509 身份验证连接到 WCF 服务(接受任何语言)

是的,您可以使用 WSE 3.0(Web 服务扩展)。它现在完全被弃用了,但我们能对 Windows 2000 说些什么呢?看看下面的文章

于 2012-07-27T07:44:58.640 回答