0

wcf サービスで TransportWithMessageCredential の設定に問題があります。

wcf 構成エディターを使用して、サービスの web.config と実行可能ファイルの app.config で Mode を TransportWithMessageCredential に、transportClientCredentialType を Windows に設定します。サーバーに自己署名証明書をインストールし、それを使用するように IIS を構成しました。

テスト アプリを実行すると、次のエラーが表示されます: System.InvalidOperationException: ユーザー名が指定されていません。ClientCredentials でユーザー名を指定します。

Windows 資格情報が wcf サービスに渡されていないようで、credentialCache.defaultCredentials を確認すると null です。これがなぜなのか、それを修正する方法についての手がかりやヒントはありますか? 前もって感謝します

サーバー 2003 / Active Directory ドメイン上の IIS 6.0。

サービスの web.config

<service name="Test.DiagnosticService">
    <endpoint binding="basicHttpBinding" bindingConfiguration="WindowsTransportCredentialBinding" name="ClientDiagnosticEndpoint" contract="Test.IDiagnostic" />
</service>

<basicHttpBinding>
    <binding name="WindowsTransportCredentialBinding" maxBufferSize="524288"
     maxReceivedMessageSize="524288">
        <readerQuotas maxDepth="128" maxStringContentLength="1048576" />
        <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="Windows" proxyCredentialType="Windows" />
        </security>
    </binding>

実行可能ファイルの app.config

<client>
<endpoint address="https://U-WM-3vIntegr8/test/Web/Services/Diagnostic.svc"
    binding="basicHttpBinding" bindingConfiguration="ClientHttpEndpoint"
    contract="Test.IDiagnostic" name="ClientDiagnosticEndpoint" />
</client>


<basicHttpBinding>
    <binding name="ClientHttpEndpoint" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:02:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="4194304" maxBufferPoolSize="524288" maxReceivedMessageSize="4194304"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="1048576"
        maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Windows" proxyCredentialType="Windows"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
</basicHttpBinding>

...クライアントから呼び出された

public static IDiagnostic GetDiagnosticService()
{
    return new ChannelFactory<IDiagnostic>("ClientDiagnosticEndpoint").CreateChannel();
}
4

1 に答える 1

2

資格情報を手動で入力する必要があります。資格情報はこの構成では自動的に渡されません。それを探している場合は、クライアントとサーバーの両方で clientCredentialType を "Windows" に設定する必要があります。今すぐ手動で設定する必要があります:

proxy.ClientCredentials.Username.User = ""
proxy.ClientCredentials.Username.Password = ""
于 2012-05-23T09:23:06.150 に答える