(401) nicht autorisiert-Fehler : WCF-Sicherheit/Bindung
Ich habe einen WCF web service und client auf der gleichen Maschine. Zugriff auf den WCF-web service direkt mit dem browser funktioniert, aber der client nicht verbinden kann; Fehlermeldung unten. Irgendwelche Ideen? Die integrierte Windows-Auth in IIS verwendet wird, für beide client und server.
The remote server returned an error: (401) Unauthorized.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Net.WebException: The remote server returned an error: (401) Unauthorized.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[WebException: The remote server returned an error: (401) Unauthorized.]
System.Net.HttpWebRequest.GetResponse() +5313085
System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +54
[MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate,NTLM'.]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +7594687
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +275
HRPaysService.IService1.GetAlert() +0
HRPaysService.Service1Client.GetAlert() +15
_Default.Page_Load(Object sender, EventArgs e) +138
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
Client:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows" realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint
address="http://hrpaysservice/service1.svc"
binding="basicHttpBinding"
bindingConfiguration="basicBinding"
contract="HRPaysService.IService1">
</endpoint>
</client>
</system.serviceModel>
Server:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows" realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint
address="http://hrpaysservice/service1.svc"
binding="basicHttpBinding"
bindingConfiguration="basicBinding"
contract="HRPaysService.IService1">
</endpoint>
</client>
</system.serviceModel>
- ist Ihr Kunde eine Silverlight-app, indem Sie keine chance?? Diese funktionieren ganz anders aus ASP.NET oder Winforms/WPF-app.
- Nee, nicht eine Silverlight-app.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Traf ich den gleichen Fehler, wenn ich versuchte, den Zugriff auf ein WCF service auf einem IIS gehostet, die durch hinzufügen einer "Service Referenz" zu meiner Windows Forms-Anwendung. Aber wenn der Kunde trifft ein Anruf für eine service-Methode, ich habe "401 UnAuthorized-exception". Hier ist meine Lösung für dieses problem:
(1) ich war mit [wsHttpBinding] wechseln Sie zu [basicHttpBinding] wie folgt in die WCF-service-config Datei:
(2) Fügen Sie einen "Service Reference" aus Ihrer client-Anwendung und geben Sie einen Namen ein (wir verwenden diesen Namen in der folgenden Schritt als "ProxyCalssName")
(3) passen Sie die app.config-Datei der client-Anwendung wie folgt:
(4) In der code-behind der client-Anwendung:
Glück, DigitalFox
Client:
Server:
Haben Sie eine CrossDomain.xml Dokument einrichten in Ihre Dienste web-Anwendung? Wenn nicht, erstellen Sie mit der folgenden Inhalte -
Wenn das Virtuelle Verzeichnis des WCF-Dienste ist nicht für den anonymen Zugriff konfiguriert ist, wird "mex" Endpunkt entfernt werden sollte.
Du gepostet hast, 2 unterschiedliche sets von configs und es scheint zu sein, überein. Könntest du posten der configs, die den Fehler verursacht ?
Ihre erste (oberste) client-config und die neuesten server-config (ohne die mex-Teil) funktionieren sollte.