1

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>

ただし、メタデータは公開できません。ブラウザの状態でサービスを確認すると、メタデータの公開が現在無効になっています。

4

1 に答える 1

2

http/https アドレス スキームで basicHttpBinding 以外のものを使用する場合は、エンドポイントを作成する必要があります。

バインディング定義に name 属性を追加します

< バインディング名="myWSBinding" ... >

次に、 bindingConfiguration および binding パラメーターをエンドポイント定義に追加します

< endpoint binding="wsHttpBinding" bindingCongifuration="myWSBinding" ... >

于 2012-05-08T12:18:36.933 に答える