IIS にデプロイされた単純な WCF サービスを使用しています。で簡略化された構成を使用しましたがBasicHttpBinding
、うまくいきました。
ここで、ユーザー名/パスワード認証を追加したいと思い、wsHttpBinding を使用しました。上記の文書では、次のように述べられています。
.NET Framework 4 では、要素は省略可能です。サービスでエンドポイントが定義されていない場合、実装されている各ベース アドレスとコントラクトのエンドポイントがサービスに追加されます。エンドポイントを決定するためにベース アドレスがコントラクト名に追加され、 バインディングはアドレス スキームによって決定されます。
これはどういう意味wsHttpBinding
ですか? アドレス スキームによるバインディングをどのように構成すればよいですか?
私の設定は次のようになります:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding>
<security mode="Message">
<transport clientCredentialType="None"/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="SampleWebservice.CustomValidator,SampleWebservice" />
</serviceCredentials>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
これは Windows Server 2008、IIS 7 です。
BasicHttpBinding
ダウンロードした svc-file で常に a を確認できるため、サービスが wsBinding 設定を取得していないようです。何か不足していますか?
編集
ユーザー stevedocious が提案した変更を適用して、web.config ファイルを変更しました。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="SampleWebservice.SampleWebservice.Sample" behaviorConfiguration="customServiceBehaviour">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint contract="SampleWebservice.SampleWebservice.ISample" binding="wsHttpBinding" bindingConfiguration="bindingConfiguration" address="" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="bindingConfiguration">
<security mode="Message">
<transport clientCredentialType="None"/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="customServiceBehaviour">
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="SampleWebservice.CustomValidator,SampleWebservice" />
</serviceCredentials>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
ただし、メタデータは公開できません。ブラウザの状態でサービスを確認すると、メタデータの公開が現在無効になっています。