2

統合 Windows 認証を有効にし、匿名認証を無効にして、IIS でホストされている WCF サービスを使用しています。ASP.NET からこのサービスを呼び出そうとすると、次の MessageSecurityException が発生します。

「HTTP 要求は、クライアント認証スキーム 'Negotiate' では許可されていません。サーバーから受信した認証ヘッダーは 'Negotiate,NTLM' でした。]"

何か案は?

これは私のサービス構成です:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="CalculatorServiceBasicHttpBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="Service.CalculatorService" 
           behaviorConfiguration="CalculatorServiceBehavior">
    <endpoint name="BasicHttpEndpoint"
              address="" 
              binding="basicHttpBinding" 
              bindingConfiguration="CalculatorServiceBasicHttpBinding"
              contract="Framework.ICalculatorService">
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

これは私がサービスを呼び出す方法です:

var basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
var factory = new ChannelFactory<Framework.ICalculatorService>(basicHttpBinding, new EndpointAddress("http://localhost/CalculatorService/CalculatorService.svc")); 
factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
var proxy = factory.CreateChannel();
var emailAddress = proxy.GetMyEmailAddress();
((ICommunicationObject)proxy).Close();
factory.Close();
4

1 に答える 1

1

あなたのWCF構成は私にとってはうまくいくので、IISがWCFサービス(およびおそらくASP.NETクライアント)用に正しく構成されていない可能性があります。サービスをホストする IIS サイトが、IIS 7 に関するこの TechNet 記事の説明に従って構成されていることを確認してください。初期状態では、IIS 7 は Windows 認証に対して有効になっていません。IIS 6 を使用している場合は、Windows 認証用にどのように構成されているかを検索する必要があります。

IIS がサービス用に正しくセットアップされたら、サービスを呼び出す ASP.NET サイトを構成する必要があります。既定では、Web サイトの ASP.NET AppPool はローカル コンピューター アカウント (ApplicationPoolIdentity または NetworkService) を使用します。そのアカウントを適切なドメイン アカウントに変更する必要があります。また、TechNet の記事で説明されているように、 IIS マネージャーで承認規則を追加するか、サービスの web.config ファイルを更新して、サービスがそのドメイン アカウントにアクセスできるようにする必要があります。

于 2012-01-05T20:57:16.633 に答える