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