2009-03-13 7 views
0

Ein Windows-Dienst wurde entwickelt und läuft auf einer 32-Bit-Maschine. Es kommuniziert mit dem Project Web Access-Webdienst. Jetzt wurde der Dienst auf denselben Computer verschoben wie der Project Web Access-Webdienst. Der Code schlägt fehl, und ich empfange diesen Fehler:Dienst entwickelt auf 32bit windows xp pro, funktioniert nicht auf Windows Server 2003 64-Bit

System.Net.WebException: The request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at ProjToolService.ProjectWebSvc.Project.ReadProject(Guid projectUid, DataStoreEnum dataStore)
at ProjToolService.Queue.AssignResource(Guid queueId, Guid projectId, Guid taskId, Guid resourceId, Guid assignmentId)

Es kann nicht die 32bit vs 64bit sein, aber ich habe keine andere Ideen.

Die Zielplattform ist x86, aber es ist auch fehlgeschlagen, AnyCPU zu verwenden. Ich versuchte auch mit DefaultCredentials und System.net.CredentialCache.DefaultNetworkCredential.

Antwort

0

Danke für alle Hilfe & Aufmerksamkeit, aber ich habe endlich das Problem entdeckt. Das Problem war das Problem des Win-Service, der lokal mit dem Web-Service ausgeführt wurde. Dieses Problem war spezifisch für das Windows Server 2003-Betriebssystem. Um das Problem zu beheben, musste ich einen neuen Wert im Registrierungseditor namens DisableLoopbackCheck erstellen und auf 1 setzen.

3

401 ist ein HTTP-Status, also sollte es nichts mit dem 32 vs 64 Bit zu tun haben. Ich würde überprüfen und sicherstellen, dass der Web-Service mit den richtigen Krediten eingerichtet wird (insbesondere wenn Sie den anonymen Zugriff planen).

Wenn ich mich richtig erinnere, ruft das DefaultNetworkCredential das Konto ab, auf dem der Dienst ausgeführt wird. Daher würde ich überprüfen, ob das Konto für den von Ihnen verwendeten Dienst über die entsprechenden Berechtigungen für den Zugriff auf den Webdienst verfügt. Die einfache Möglichkeit, dies zu überprüfen, besteht darin, dem Konto den Dienstverwaltungszugriff für den Computer zu erteilen (und es dann wieder zu entfernen, wenn Sie fertig sind). Wenn es funktioniert, handelt es sich um ein Berechtigungsproblem. Wenn nicht, dann weißt du, dass es etwas anderes ist.

Um die Konto Rechte zu geben gehen Sie zu Verwaltung -> Computer-Management -> Lokale Benutzer und Gruppen -> Gruppen. Fügen Sie den Netzwerkbenutzer der entsprechenden Gruppe hinzu (wie ich schon sagte, würde ich mit admin anfangen und mich nach unten arbeiten.)

+0

mein Dienst läuft unter Verwendung eines Netzwerkbenutzers. Ich habe versucht, DefaultNetorkCredential und es hat nicht funktioniert. nicht sicher, wie zu gewähren oder zu wissen, ob sie Benutzer ist der Administrator der Maschine tho>.> – Marlon

0

Mit welchem ​​Benutzer läuft Ihr Dienst? Denken Sie daran, dass der lokale Benutzer usw. nicht ausgeführt wird, wenn die Box nicht angemeldet ist und die Server dies normalerweise nicht tun. Netzwerkbenutzer könnte funktionieren.

+0

mein Dienst läuft mit einem Netzwerkbenutzer. Ich habe versucht, DefaultNetorkCredential und es hat nicht funktioniert. nicht sicher, wie zu gewähren oder zu wissen, ob sie Benutzer ist der Administrator der Maschine tho>.> – Marlon

0

Die Sicherheitseinstellungen auf dem Win2003 sind viel konservativer als in WinXP, insbesondere im Netzwerkzugriff. Sie könnten besser in Ihren Webservice- und Systemprotokollen nach "access denied" -Fehlern suchen und sicherstellen, dass Ihr Dienst (mit seinem genauen Namen, bis zu ? in der URL) Zugriff auf Anfragen hat.

Verwandte Themen