führt. Ich reiße mir die Haare aus, ich habe einen WCF-Dienst, den ich über den Browser aufrufen kann und es funktioniert einwandfrei, wenn ich ihn von der Webanwendung aus anrufe die folgende Methode bekomme ich eine (401) Unauthorized Fehler. Und der Service wird nicht angerufen. Wenn ich meine Web-Anwendung von meinem lokalen Rechner (Debug-Modus mit IIS Express) auf meinen Dev-Server (IIS7) zeige, funktioniert es aber, wenn ich meine Web-Anwendung auf dem Dev-Server deploye und auf den Dev-Server diene scheitert mit dem Fehler 401. Ich denke, dass dies etwas mit IIS7 zu tun hat, aber ich bin nicht 100% sicher und Hilfe wäre super nützlich.Ich übergebe keine Zugangsdaten zum WCF Service, was zu einem 401
Ich habe online nach den Antworten gesucht, aber bis jetzt das Beste, was ich gefunden habe, ist this.
Mein Service-Aufruf lautet wie folgt:
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;
Meine Konfiguration für den Service sieht wie folgt aus:
<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>
ich auf dem Client-Service-Aufruf einige Protokollierung gesetzt haben, kurz bevor Ich rufe den Service an, die Antwort lautet:
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)
Der Code sieht so aus:
logger.Debug("Passing Login: "
+ System.Security.Principal.WindowsIdentity.GetCurrent().Name)
Auch wenn ich die AppPool für meine Website zu meinem Domain-Konto ist es immer noch die Genehmigung mich nicht den WCF-Dienst zugreifen zu können, aber auch hier: es ist für den Browser arbeiten . So seltsam!
Es ist nicht immer einfach, die WCF- und Windows-Authentifizierung zu erhalten. Versuchen Sie Fiddler auf dem Client, um den http-Ablauf zu verfolgen. Versuchen Sie auch, die WCF-Ablaufverfolgung auf dem Server zu konfigurieren: http://msdn.microsoft.com/en-us/library/ms733025.aspx – Joe