У меня есть простая служба WCF, которая использует WSHttpBinding и проверку подлинности Windows.Я пытаюсь заставить сервер олицетворять личность клиента при каждом вызове метода для этой службы.
Я испробовал совет, данный на Олицетворение службы WCF , но не совсем получаю хорошие результаты,Когда я пытаюсь перейти на целевую страницу службы WCF, я вижу ошибку:
Для операции контракта GetAdvice требуется идентификатор Windows для автоматической олицетворения.Идентификатор Windows, который представляет вызывающего, не предоставляется связыванием ('WSHttpBinding', 'http://tempuri.org/') для контракта (' IMagicEightBallService ',' http://tempuri.org/'.
Любые идеи о том, что эта ошибкапытаетесь мне сказать?
Все решение можно просмотреть по адресу ftp: //petio.org/2011/07/01/MagicEightBall/ (или загрузить по адресу http://petio.org/2011/07/01/MagicEightBall.zip).Я просто публикую проект в локальной папке IIS и обращаюсь к службе по адресу http://localhost/MagicEightBall/MagicEightBallService.svc.
Спасибо!
ОБНОВЛЕНИЕ:
Web.config моей службы:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="Petio.MagicEightBall.MagicEightBallService" behaviorConfiguration="MagicEightBallServiceBehavior">
<endpoint name="WSHttpBinding_WindowsSecurity_IMagicEightBallService"
address="http://localhost/MagicEightBall/MagicEightBallService.svc"
binding="wsHttpBinding"
contract="Petio.MagicEightBall.IMagicEightBallService" />
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MagicEightBallServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceAuthorization impersonateCallerForAllOperations="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Мой сервисный код:
public class MagicEightBallService : IMagicEightBallService
{
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public string GetAdvice()
{
MagicEightBall ball = new MagicEightBall();
return ball.GetAdvice();
}
}