Ошибка в клиенте WCF, работающем под IIS 5.0 с сервером в Windows 2008

У меня есть служба WCF .Net 3.5 SP1, работающая под IIS 7 на компьютере с Windows 2008. Когда я пытаюсь подключиться к этой службе из службы WCF, размещенной в IIS, работающей под IIS 5.0 (Windows XP) .Net 3.5 SP1, я получаю следующую ошибку:

Поставщик токенов не может получить токены для цели: http://(URL для службы WCF)

Я создал простое консольное приложение, которое может успешно подключаться к службе WCF с использованием точно такой же конфигурации. Я также создал простое веб-приложение, размещенное на сервере WebDev (сервер ASP.Net, который поставляется с Visual Studio 2008), и оно может успешно подключаться к службе WCF. Когда я настроил виртуальный каталог в IIS (Windows XP) так, чтобы он указывал на тот же каталог, что и сервер WebDev, я получаю следующую ошибку:

В пакете безопасности нет учетных данных

Но если я настрою web.config для включения олицетворения с использованием моих учетных данных, он будет работать нормально. Это не лучшее долгосрочное решение по очевидным причинам. Единственное различие, которое я заметил между серверами IIS и WebDev, - это пользователь, под которым работает каждый процесс. IIS работает под учетной записью ASPNet, а WebDev - под моей учетной записью.

Вот конфигурация раздела WCF на клиенте:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="mexBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="200" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <wsHttpBinding>
    <binding name="FABindings" maxReceivedMessageSize="2147483647">
      <readerQuotas maxStringContentLength="300000"/>
      <security mode="Message">
        <message clientCredentialType="Windows" negotiateServiceCredential="false" establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="http://<server url>/FinancialAggregator/v3/Services/FAService.svc"
      binding="wsHttpBinding" bindingConfiguration="FABindings"
      contract="ServiceReference1.IFilteredService" name="FAServiceEndpoint">
    <identity>
      <servicePrincipalName value="<UsernameRunningTheAppPoolOnW2k8>" />
    </identity>
  </endpoint>
</client>  

Here's the server config (as requested):

  <system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding" maxReceivedMessageSize="2147483647">
      <security mode="Message">
        <message establishSecurityContext="false" negotiateServiceCredential="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="mexBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="200" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="mexBehavior" name="FCSAmerica.Financial.Aggregator.Service.FilteredService">
    <endpoint name="FAServiceEndpoint" address="" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" contract="FCSAmerica.Financial.Aggregator.Service.IFilteredService">
    </endpoint>
  </service>
</services>

Any thoughts on the cause of this error?

Спасибо!


person Matt Ruwe    schedule 22.05.2009    source источник
comment
Какая конфигурация на стороне сервера?   -  person marc_s    schedule 22.05.2009


Ответы (2)


Когда вы получаете доступ к службам через IIS с impersonate = false, то для доступа к службе на компьютере с Windows 2008 используется учетная запись ASPnet.

Учетная запись ASPnet является локальной учетной записью и поэтому не имеет прав на компьютере 2008 года.

Есть 3 способа решить эту проблему:

  • Разрешить анонимный доступ к службе на компьютере с Windows 2008
  • Используйте impersonate = true (как и у вас)
  • Измените идентификатор пула приложений с aspnet на учетную запись домена с требуемым доступом.
person Shiraz Bhaiji    schedule 24.06.2009
comment
Благодарю за ваш ответ! Однако я все еще немного запутался. Когда вы говорите use impresonate = true (как и у вас), значит ли это, что я не должен получать эту ошибку? Кроме того, чтобы решить другие вопросы, разрешение анонимного доступа неприемлемо в этой среде, и я не могу изменить идентификатор пула приложений, потому что моя среда разработки - это Windows XP с IIS 5.1, в которой нет пулов приложений. Еще раз спасибо! Мэтт - person Matt Ruwe; 25.06.2009

Я предполагаю, что окончательный ответ на этот вопрос - просто перейти на ОС, которая позволяет вам установить идентификатор пула приложений, что я сделал много лет назад.

Спасибо за внимание.

Мэтт

person Matt Ruwe    schedule 19.08.2011