У меня очень сильная головная боль, поэтому любая помощь, которую вы, ребята, можете предложить, приветствуется.
После нескольких месяцев работы проекта, который находился в подвешенном состоянии, когда я возвращаюсь к нему, я теперь получаюэта ошибка:
HTTP-запрос не авторизован с помощью схемы аутентификации клиента e «Согласование».Заголовок аутентификации, полученный от сервера, был 'Negotiate, NTLM'.
Я был во всем Google с этим и кучей сообщений StackOverflow.Ничего из того, что я нашел, не сработало. Следует отметить одну важную вещь: если я удаляю NetworkCredential и просто запускаю консольное приложение в своем собственном пользовательском контексте, он работает нормально. И методы WCF ограничены членамиопределенная группа AD, к которой принадлежат и я, и пользователь macrequest.Я сбросил пароль пользователя и дважды проверил, что он все еще находится в указанной группе.
IIS настроен на использование анонимной аутентификации и аутентификации Windows, как показано на рисунке:
Таким образом, мой код клиента:
try
{
svc.ClientCredentials.Windows.ClientCredential = new NetworkCredential(
"macrequest",
"password",
"domain.net"
);
svc.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
try
{
Console.WriteLine("Version: {0}", svc.GetVersion());
Console.WriteLine("Received MAC: {0}", svc.GetSingleAddress("Console app"));
}
catch (FaultException<ServiceReference1.DefaultFaultContract> ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
Console.Read(); }
catch (Exception e)
{
Console.WriteLine("General error: {0}", e.Message);
}
Console.Read();
А вот мой Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="system.serviceModel">
<section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
allowDefinition="MachineToApplication" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web>
<httpModules>
<add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<roleManager enabled="true" />
<authentication mode="Windows">
</authentication>
<profile>
<properties>
<add name="FriendlyName" />
</properties>
</profile>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="DomainServiceModule" preCondition="managedHandler" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" />
</modules>
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="MacDatabase.Web.MacDbService.customBinding0">
<binaryMessageEncoding />
<httpTransport authenticationScheme="Negotiate" proxyAuthenticationScheme="Anonymous" />
</binding>
</customBinding>
</bindings>
<services>
<service name="MacDatabase.Web.MacDbService">
<endpoint address="" binding="customBinding" bindingConfiguration="MacDatabase.Web.MacDbService.customBinding0" contract="MacDatabase.Web.MacDbService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<connectionStrings>
<add name="MacDbEntities" connectionString="metadata=res://*/MacDbModel.csdl|res://*/MacDbModel.ssdl|res://*/MacDbModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=server.domain.net;Initial
Catalog=Testing;Persist Security Info=True;User ID=MAC_DB_Login;Password=wR5preGa;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>