2009-03-13 8 views
0

Un service Windows a été développé et fonctionne sur une machine 32 bits. Il communique avec le service Web Project Web Access. À présent, le service a été déplacé vers le même ordinateur que le service Web Project Web Access. Le code échoue et je reçois cette erreur:Service développé sur 32 bits Windows XP Pro, ne fonctionne pas sur Windows Server 2003 64 bits

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)

Il ne peut pas être le 32bit vs 64 bits, mais je n'ai pas d'autres idées.

La plate-forme cible est x86, mais elle a également échoué en utilisant AnyCPU. J'ai également essayé d'utiliser DefaultCredentials et System.net.CredentialCache.DefaultNetworkCredential.

Répondre

0

Merci pour toute l'aide & attention mais j'ai finalement découvert le problème. Le problème était le problème du service win exécutant localement avec le service Web. Ce problème était spécifique au système d'exploitation Windows Server 2003. pour résoudre le problème, j'ai dû créer une nouvelle valeur dans l'éditeur de registre appelé DisableLoopbackCheck, et le définir à 1.

3

401 est un état HTTP, donc il ne devrait pas avoir quelque chose à voir avec le 32 vs 64 bits. Je vérifie et m'assure que le service Web est configuré en utilisant les informations d'identification correctes (particulièrement si vous prévoyez d'utiliser l'accès anonyme). Si je me souviens bien, DefaultNetworkCredential tire sur le compte qui exécute le service, donc je vérifierais pour m'assurer que le compte du service que vous utilisez a les droits appropriés pour accéder au service Web. Le moyen le plus simple de vérifier ceci est de donner au compte exécutant l'accès administratif du service à la machine (puis de l'emporter lorsque vous avez terminé). Si cela fonctionne, alors c'est un problème d'autorisations. Si non, alors vous savez que c'est autre chose.

Pour attribuer des droits au compte, accédez à Outils d'administration -> Gestion de l'ordinateur -> Utilisateurs et groupes locaux -> Groupes. Ajouter l'utilisateur réseau au groupe approprié (comme je l'ai dit je commencerais par admin et travailler mon chemin vers le bas.)

+0

mon service s'exécute en utilisant un utilisateur réseau. J'ai essayé DefaultNetorkCredential et cela n'a pas fonctionné. Je ne sais pas comment accorder ou savoir si l'utilisateur est l'administrateur de la machine.> – Marlon

0

De quel utilisateur votre service est-il en cours d'exécution? N'oubliez pas que l'utilisateur local, etc. ne s'exécute pas lorsque la boîte n'est pas connectée, ce qui n'est généralement pas le cas des serveurs. L'utilisateur réseau peut fonctionner.

+0

mon service s'exécute en utilisant un utilisateur réseau. J'ai essayé DefaultNetorkCredential et cela n'a pas fonctionné. pas sûr de savoir comment accorder ou savoir si l'utilisateur est l'administrateur de la machine tho>.> – Marlon

0

Les paramètres de sécurité sur le Win2003 sont beaucoup plus conservateurs que dans WinXP, en particulier dans l'accès au réseau. Vous pourriez être mieux servi en regardant dans votre webservice et les journaux système pour les erreurs «accès refusé», et assurez-vous que votre service (avec son nom exact, jusqu'au ? dans l'URL) est autorisé à accéder aux demandes de service.

Questions connexes