0

正しく機能するWindows認証を使用してWCFサービスを作成しました。現在、SSLを追加しようとしています。手順を実行した後、匿名認証を使用しているように見え、次のエラーが発生します。HTTP要求はクライアント認証スキーム「匿名」で禁止されました。

手がかりをいただければ幸いです。

Windows Server2008R2および.Netバージョン4でIIS7.5を使用しています

正しく機能した構成ファイルには、次のサービスモデル(サーバー側)があります。

      <system.serviceModel>
    <bindings />
<client />
<services>
  <service name="WCFServiceTest.Service1" behaviorConfiguration="WCFServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="WCFServiceTest.WCFService1">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="WCFServiceBehavior">

      <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />

      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>

これは変更された構成です

        <system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="TransportWsSecurity">
                <security mode="Transport">
                    <transport clientCredentialType="Windows"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client />
    <services>
        <service name="WCFServiceTest.Service1" behaviorConfiguration="WCFServiceBehavior">
            <endpoint address="" binding="wsHttpsBinding" 
                      bindingConfiguration="TransportWsSecurity"
                      contract="WCFServiceTest.WCFService1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
            <host>
            </host>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="WCFServiceBehavior">

                <serviceMetadata httpsGetEnabled="True" policyVersion="Policy15" />

                <serviceDebug includeExceptionDetailInFaults="True" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

これは、サービスを呼び出すコードです。trueを返すだけのIgnoreCertificateErrorHandlerには到達しません。

                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(IgnoreCertificateErrorHandler);
            WCFService1Client client = new WCFService1Client();

            client.ClientCredentials.Windows.ClientCredential.UserName = Utility1.GetConfig("RemoteLogin");
            client.ClientCredentials.Windows.ClientCredential.Password = Utility1.GetConfig("RemotePassword");

            try
            {
                result = client.SendUpdatesFromLocation(temp);
            }
            catch (FaultException<WCFProcessFault> ex)
            {
                string op = ex.Detail.Operation;
                string err = ex.Detail.Notes;

            }
            finally
            {
                client.Close();
            }
            WCFService1Client client = new WCFService1Client();

            client.ClientCredentials.Windows.ClientCredential.UserName = Utility1.GetConfig("RemoteLogin");
            client.ClientCredentials.Windows.ClientCredential.Password = Utility1.GetConfig("RemotePassword");

            try
            {
                result = client.SendUpdatesFromLocation(temp);
            }
            catch (FaultException<WCFProcessFault> ex)
            {
                string op = ex.Detail.Operation;
                string err = ex.Detail.Notes;

            }
            finally
            {
                client.Close();
            }
4

1 に答える 1

0
<bindings>
    <wsHttpBinding>
        <binding name="TransportWsSecurity">
            <security mode="Transport">
                <transport clientCredentialType="Ntlm"/>
            </security>
        </binding>
    </wsHttpBinding>
</bindings>

上記の変更を試してください。これは、認証にネゴシエート(Kerberos)ではなくNtlmを使用します。サーバーをKerberos認証用にセットアップしていない可能性が非常に高いです。

于 2013-03-14T05:14:31.793 に答える