2011-12-15 49 views
0

我有一個.NET 4.0 WCF服務託管在Windows Server 2008上的IIS中,該服務通過HTTP運行得很好。第三方正在使用WCF服務,第三方正在使用Appian Process Modeler來配置WCF客戶端(不是相關的,但我想我會提到它)。Java客戶端使用基於SSL的.NET WCF(不支持WS-Policy)

編輯:所以他們使用Appian Process Modeler的事實可能實際上是相關的。它是一個基於Java的客戶端,這意味着我們試圖讓Java客戶端使用基於SSL的WS-Policy來使用.NET WCF服務。編輯#2:因爲我現在知道Java正在使用.NET服務,這是一個修復程序,我可以在我的一端執行以允許Java通過SSL使用我的服務,或者是否有修復我的客戶端可以放置到允許他們的Java代碼使用WS-Policy使用.NET服務嗎?

從移動檢測,對我們的生產環境中,當我們的客戶更新其服務引用指向新的生產URL後,他們得到了以下錯誤:

端點BasicHttpBinding_IInterface包含對WS-引用政策主題,尚未得到支持。該端點不可用於選擇。 (APNX-2-4041-003)

在比較兩個WSDL文檔(非SSL /測試,SSL /生產)時,我發現了兩個與WS-Policy相關的差異(這兩個差異都是隻有兩個差異,除了網址,WSDL文檔中):

<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通過SSL響應沒有WS-Policy要求?

這是我們正在使用的服務器上的配置:

<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> 

回答

1

據微軟稱,這似乎並不可能。

請參閱herehere

認證模式和相應的前綴和命名空間在MSDN討論。這可能會給你一些額外的想法。

+0

感謝您的回覆和鏈接。我想我的問題已經變得更多的是「如何讓Java客戶端通過SSL使用我的.NET WCF服務」,而不是「如何關閉WS-Policy」。我贊成你的回答,儘管這些鏈接確實爲我的原始問題提供了一些見解。 – Scott 2011-12-15 17:42:22