Windows Server 2008 の IIS でホストされている .NET 4.0 WCF サービスがあり、HTTP 経由で正常に動作しています。WCF サービスは、Appian Process Modeler を使用して WCF クライアントを構成しているサード パーティによって消費されています (関連性があるわけではありませんが、言及したいと思います)。
編集: したがって、彼らが Appian Process Modeler を使用しているという事実は、実際に関連している可能性があります。これは Java ベースのクライアントです。つまり、Java クライアントが WS-Policy over SSL を使用して .NET WCF サービスを利用できるようにしようとしています。
編集 #2:Java が .NET サービスを消費していることがわかったので、これは Java が SSL 経由でサービスを消費できるようにするために私ができる修正ですか、それともクライアントが許可するために配置できる修正がありますか? WS-Policy を使用して .NET サービスを利用するための Java コードはありますか?
テスト環境から本番環境に移行した後、クライアントがサービス参照を更新して新しい本番 URL を指すようにすると、次のエラーが発生します。
エンドポイント BasicHttpBinding_IInterface には、まだサポートされていない WS-Policy サブジェクトへの参照が含まれています。そのエンドポイントは選択できません。(APNX-2-4041-003)
2 つの WSDL ドキュメント (非 SSL/テスト、SSL/本番) を比較すると、次の 2 つの違いが見つかりました。どちらも WS-Policy に関連しています (これらは、URL を除いて、WSDL ドキュメントの 2 つの違いのみです)。
<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"/>
これら 2 つのセクションを削除して、本番環境で静的 WSDL ドキュメントを作成しようとしましたが、そうすると、WCF サービスへの安全な接続を生成できません。
私の質問は、WS-Policy 要件なしで SSL 経由で応答するように WCF を構成するにはどうすればよいですか?
サーバーで使用している構成は次のとおりです。
<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>