IIS6でホストされるWCFサービスを作成し、IISで匿名認証を無効にしたいのですが。また、SSLは使用しないでください。
だから私が持っている唯一の方法は、basicHttpBingingをTransportCredentialOnly
で使用することですよね。
仮想ディレクトリを作成し、Windows統合認証を設定して、[匿名アクセスを有効にする]をオフにします。
これが私のweb.configです:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="Samples.ServiceFacadeService" behaviorConfiguration="ServiceFacadeServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
contract="Samples.IServiceFacadeService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceFacadeServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
メタデータ交換用のMEX-enpointも含めていないことがわかります。 TransportCredentialOnlyセキュリティーを使用して、1つのエンドポイントとその1つのバインディングのみ。
しかし、サービスを開始しようとすると(クライアントプロキシを介してメソッドを呼び出す)、EventLogに次のような例外が発生しました。
例外:System.ServiceModel.ServiceActivationException:コンパイル中の例外のため、サービス '/wcftest/ServiceFacadeService.svc'をアクティブ化できません。例外メッセージは次のとおりです:このサービスのセキュリティ設定には「匿名」認証が必要ですが、IISこのサービスをホストするアプリケーションでは有効ではありません。---> System.NotSupportedException:のセキュリティ設定このサービスには「匿名」認証が必要ですが、このサービスをホストするIISアプリケーションでは有効ではありません。
私のサービスが匿名認証を必要とする理由がわかりません。どうして?
答えはjezellでした。ありがとう。 bindingNameとbindingConfigurationを混同しました:
<endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
contract="Samples.IServiceFacadeService">
</endpoint>
そのとおり:
<endpoint address="" binding="basicHttpBinding" **bindingConfiguration**="MyBinding"
contract="Samples.IServiceFacadeService">
</endpoint>
MEXエンドポイントがまだ問題である可能性があります(これを参照してください post )。次のようにMEXを無効にしてみてください。
<services>
<!-- Note: the service name must match the configuration name for the service implementation. -->
<service name="MyNamespace.MyServiceType" behaviorConfiguration="MyServiceTypeBehaviors" >
<!-- Add the following endpoint. -->
<!-- Note: your service must have an http base address to add this endpoint. -->
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<!-- This disables it. -->
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
これは、MEXのセキュリティ保護に役立つ post です。
MexエンドポイントにbasicHttpBindingを使用して、同じbindingConfigurationを適用します。
VS wcfサービスプロジェクト(新しいサンプルプロジェクト)をIISの認証で機能させるには、次のことを行う必要があります。
1)IISで匿名アクセスを許可する
2)次のような属性をパブリックメソッドにプレフィックスします。
[PrincipalPermission(SecurityAction.Demand, Role = "MyADGroup")]
public string SendMyMessage(string Message)
{...}