0

我在 Windows Server 2008 上的 IIS 中托管了一个 .NET 4.0 WCF 服务,该服务在 HTTP 上运行得很好。WCF 服务正在被第三方使用,该第三方正在使用 Appian Process Modeler 来配置 WCF 客户端(不是说它是相关的,但我想我会提到它)。

编辑:所以他们使用 Appian Process Modeler 的事实可能实际上是相关的。它是一个基于 Java 的客户端,因此这意味着我们正在尝试让 Java 客户端使用基于 SSL 的 WS-Policy 来使用 .NET WCF 服务。

编辑#2:由于我现在知道 Java 正在使用 .NET 服务,这是我可以做的修复,以允许 Java 通过 SSL 使用我的服务,还是我的客户端可以实施修复以允许他们的 Java 代码使用 WS-Policy 来使用 .NET 服务?

从测试转移到我们的生产环境后,当我们的客户端更新其服务引用以指向新的生产 URL 时,他们收到以下错误:

端点 BasicHttpBinding_IInterface 包含对尚不支持的 WS-Policy 主题的引用。该端点不可选择。(APNX-2-4041-003)

在比较两个 WSDL 文档(非 SSL/测试、SSL/生产)时,我发现了以下两个差异,它们都与 WS-Policy 相关(这是 WSDL 文档中唯一的两个差异,除了 URL 之外):

<wsp:Policy wsu:Id="BasicHttpBinding_IInterface_policy">
    <wsp:ExactlyOne>
      <wsp:All>
        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
          <wsp:Policy>
            <sp:TransportToken>
              <wsp:Policy>
                <sp:HttpsToken RequireClientCertificate="false"/>
              </wsp:Policy>
            </sp:TransportToken>
            <sp:AlgorithmSuite>
              <wsp:Policy>
                <sp:Basic256/>
              </wsp:Policy>
            </sp:AlgorithmSuite>
            <sp:Layout>
              <wsp:Policy>
                <sp:Strict/>
              </wsp:Policy>
            </sp:Layout>
          </wsp:Policy>
        </sp:TransportBinding>
      </wsp:All>
    </wsp:ExactlyOne>
  </wsp:Policy>

<wsp:PolicyReference URI="#BasicHttpBinding_IInterface_policy"/>

我尝试在生产环境中创建一个静态 WSDL 文档,并删除了这两个部分,但如果这样做,我将无法生成与 WCF 服务的安全连接。

所以我的问题是,如何配置 WCF 在没有 WS-Policy 要求的情况下通过 SSL 响应?

这是我们在服务器上使用的配置:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="basicHttps">
                <security mode="Transport">
                    <transport clientCredentialType="None" />
                    <message />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client />
    <services>
      <service name="Namespace.API.IInterface_Implementation">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="basicHttps"
                  contract="Namespace.API.Interfaces.IInterface"/>
        <endpoint address="mex"
                  binding="mexHttpsBinding"
                  contract="IMetadataExchange"/>

      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
4

1 回答 1

1

根据微软的说法,这似乎是不可能的。

这里这里

MSDN中讨论了身份验证模式和相应的前缀和命名空间。这可能会给你一些额外的想法。

于 2011-12-15T17:33:46.947 回答