L'appel de ASMX Service à partir de l'application en C# avec l'authentification Windows?
J'ai créé simple .NET Web Service (ASMX) que j'appelle de mes .NET application web. Le service web et application à la fois de l'utilisation de Windows Authetication.
com.mydomain.MyWebService webSrvc = new com.mydomain.MyWebService();
string output = webSrvc.MyServiceMethod();
Je suis en train de créer des applications Windows avec C#, et demandent le même service web à partir de là. J'ai ajouté une référence web dans mon projet pour le service, et je peux faire des appels vers le service web pour les méthodes sans problème. Le problème est, à l'intérieur de la web méthodes, je suis en train de récupérer de l'utilisateur nom d'utilisateur windows.
string username = User.Identity.Name; //always blank
Cela fonctionne quand j'appelle le service web à partir de mon application web, mais quand je l'appelle à partir de mon application windows, il renvoie toujours vierge, et de l'Utilisateur.L'identité.IsAuthenticated est toujours faux, si cela est pertinent. Ce qui me manque ici. J'ai juste besoin d'obtenir la version Windows de l'utilisateur nom d'utilisateur qui exécute l'application de console, qui a appelé le service web. J'ai essayé paramètre les informations d'identification de webSrvc à la ClientCache informations d'identification par défaut, mais qui ne résout pas le problème.
Mise à JOUR: je ne sais pas si c'est utile, mais j'ai appris que si j'utilise de l'Environnement.Nom d'utilisateur, il va donner "NETWORK_SERVICE", et puis si j'permettre l'usurpation d'identité, il va donner "IUSR_[hostname]". Il me semble que je suis juste en manque de quelque chose de vraiment simple. Je veux juste que l'utilisateur windows actuel, qui est en cours d'exécution de l'application windows (qui appelle le service web).
OriginalL'auteur dave823 | 2012-07-10
Vous devez vous connecter pour publier un commentaire.
Vous êtes de passage des informations d'identification réseau à votre service web de l'objet avant de l'appeler? Quelque chose comme:
Chipé à partir de: http://msdn.microsoft.com/en-us/library/bfazk0tb.aspx
Essentiellement lorsque le service web est appelé à partir de l'application web que vous avez déjà tous les cookies et les informations de session de rester dans les parages. Lorsque vous écrivez une application autonome, il n'aura pas accès aux cookies, données de formulaire, etc.
"Ne pourrait-il pas de travail depuis que je suis à l'aide de l'authentification windows avec accès anonyme désactivé". Non, en fait. Le code que vous utilisez ne prend pas de "passer au travers" des informations d'identification pour votre site web à l'objet du service. Il fonctionne dans le navigateur, car c'est un comportement que le navigateur fabricant (MS) est activée. Toutefois, votre application windows forms ne pas transmettre les informations d'identification sous lequel il est en cours d'exécution d'un service web par défaut. vous devez définir explicitement.
Merci pour vos commentaires jusqu'à présent. Dans votre exemple de code, je ne comprends toujours pas comment je suis supposé obtenir un mot de passe des utilisateurs à passer dans le réseau d'informations d'identification. Je peux obtenir le nom d'utilisateur et de domaine de windows identité, mais qu'mot de passe? Aussi, je remarque que votre code utilise l'authentification "Basic". Ce travail sera si IIS web app est configuré pour "Authentification Intégrée de Windows".
L'utilisateur doit taper dans. Vous ne pouvez pas simplement "détecter" le mot de passe. Il ne fonctionne pas de cette façon. Même Microsoft Outlook vous demande de mettre votre Mot de passe de Domaine Windows (certes une fois, et alors il "sauve".)
OriginalL'auteur Richthofen
Ensemble
Cela permettra d'authentifier le currentuser (ou compte le processus actuel est en cours d'exécution)
OriginalL'auteur pego