У меня есть служба 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>
Вот конфигурация сервера (по запросу):
<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>
Есть мысли о причине этой ошибки?
Спасибо!