Https上でwcfを動作させる方法。私はhttpsでこのwcfを使用したいと思います。答えが得られなかった多くの記事を検索しました。wcfの概念に新しいiamを助けてください。私はajax、jqueryからそれを呼び出したい
<system.serviceModel >
<services>
<service
name="WcfRestfulService.HttpService" behaviorConfiguration="ServiceBehaviour" >
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="web"
contract="WcfRestfulService.IHttpService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata 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>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
WCFを使用してRESTfulサービスを構築していて、セキュリティで保護されていることは本当に近いのようです。
セキュリティを確保するために必要なことは次のとおりです。
WebHttpBinding
に設定されている新しいTransport
構成を追加します。WebHttpBinding
構成をサービスエンドポイントバインディングに割り当てます。httpGetEnabled="false"
を設定して、RESTfulサービスにHTTPS経由でのみアクセスできることを確認してください。これらの変更はすべて、修正された構成ファイルにまとめられています(変更された点についてはコメントを参照)。また、サービスエンドポイントはHTTPではなくHTTPSスキームを使用する必要があることに注意してください。
<system.serviceModel >
<services>
<service name="WcfRestfulService.HttpService"
behaviorConfiguration="ServiceBehaviour" >
<endpoint address=""
binding="webHttpBinding"
<!-- Add reference to secure WebHttpBinding config -->
bindingConfiguration="webHttpTransportSecurity"
behaviorConfiguration="web"
contract="WcfRestfulService.IHttpService" />
<!-- Need to make sure that our metadata
publishing endpoint is using HTTPS as well -->
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<!-- Add secure WebHttpBinding config -->
<bindings>
<webHttpBinding>
<binding name="webHttpTransportSecurity">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpsGetEnabled="true"
<!-- Make sure the service can
be accessed only via HTTPS -->
httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
バインディングにsecurity mode="Transport"
を設定する必要があります
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
詳しくは [〜#〜] msdn [〜#〜]
私も同じ問題を抱えていましたが、サービスが内部にあるため、HTTP get要求をテストしたかったのです。
HTTPSを有効にすることも忘れないでください。 httpsGetEnabled="true"
私の設定は例として以下です:
<bindings >
<basicHttpBinding>
<binding name="secureHttpBinding" >
<security mode="Transport" />
</binding>
</bindings>
.....
<behaviors>
<serviceBehaviors>
<behavior >
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>