Я отрываю свои волосы от этого, у меня есть служба WCF, которую я могу вызвать через браузер, и она отлично работает, когда я вызываю ее из веб-приложения с помощью ниже метод я получаю (401) Несанкционированный Ошибка. И сервис не вызван. Более того, когда я запускаю свое веб-приложение с моего локального компьютера (режим отладки с помощью IIS Express), указанный на моем dev-сервере (IIS7), он работает, но когда я развертываю свое веб-приложение на сервере dev и указываю его на службы dev-сервера, с ошибкой 401. Я думаю, что это как-то связано с IIS7, но я не уверен на 100%, и помощь будет очень полезна.Не передавать учетные данные в службу WCF, приводя к 401
Я искал онлайн ответы, но пока что лучшее, что я нашел, это this.
Мой вызов службы выглядит следующим образом:
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json; charset=utf-8";
request.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse responce = request.GetResponse();
Stream reader = responce.GetResponseStream();
var sReader = new StreamReader(reader);
string outResult = sReader.ReadToEnd();
sReader.Close();
var result = (T) JsonConvert.DeserializeObject(outResult, typeof (T));
return result;
Моя конфигурация для службы выглядит следующим образом:
<service name="RGMPServices.Householding.Services.AccountService" behaviorConfiguration="Default">
<endpoint address="" kind="webHttpEndpoint" endpointConfiguration="SecuredHttpEndpointBinding" contract="RGMPServices.Householding.Contracts.IAccountService" />
</service>
<service name="RGMPServices.Householding.Services.HouseholdService" behaviorConfiguration="Default">
<endpoint address="" kind="webHttpEndpoint" endpointConfiguration="SecuredHttpEndpointBinding" contract="RGMPServices.Householding.Contracts.IHouseholdService" />
</service>
<service name="RGMPServices.Householding.Services.UserService" behaviorConfiguration="Default">
<endpoint address="" kind="webHttpEndpoint" endpointConfiguration="SecuredHttpEndpointBinding" contract="RGMPServices.Householding.Contracts.IUserService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="SecuredHttpEndpointBinding" helpEnabled="true" automaticFormatSelectionEnabled="true">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
Я поставил некоторые протоколирование на вызов обслуживания клиентов, как раз перед Я зволю в службу, ответ:
DEBUG 2013-10-01 13:15:13,569 452ms ServiceGetSingle - Passing Login: MYLANDOMAIN\MYLANUSERNAME
ERROR 2013-10-01 13:15:13,631 514ms ServiceGetSingle - ERROR Calling ServiceGetSingle with user credentials login: MYLANDOMAIN\MYLANUSERNAME System.Net.WebException: The remote server returned an error: (401) Unauthorized. at System.Net.HttpWebRequest.GetResponse() at Householding.Common.ServiceHelper.ServiceGetSingle[T](String url)
код выглядит следующим образом:
logger.Debug("Passing Login: "
+ System.Security.Principal.WindowsIdentity.GetCurrent().Name)
Даже когда я установил AppPool для моего сайта на мою учетную запись домена она до сих пор не разрешать мне получить доступ к службе WCF, но опять-таки: он работает в браузере , Так странно!
Не всегда легко работать с аутентификацией WCF и Windows. Попробуйте Fiddler на клиенте отслеживать поток HTTP. Также попробуйте настроить трассировку WCF на сервере: http://msdn.microsoft.com/en-us/library/ms733025.aspx – Joe