Déploiement d'un web service dans IIS 5

Résolu
DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011 - 4 mai 2006 à 11:05
DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011 - 1 mars 2007 à 19:44
Bonjour,
Voici ma situation : j'ai un web service qui permet de partager un répertoire. Tout d'abord, je l'ai développé avec Visual Studio 2005. Tout marchait à la perfection. Le problème est survenu lorsque j'ai essayé de publier mon web service sur le serveur web IIS 5. La publication se fait sans problèmes mais à l'appel de ma méthode qui partage le répertoire, celle-ci me lance une exception qui me dit que l'accès est refusé (je ne sais pas à quel resource l'accès est refusé...).

Tout d'abord, j'ai pensé aux ACL du répertoire. Afin d'y remédier, j'ai ajouté le groupe d'utilisateur Tout le monde avec un contrôle total sur mon répertoire. Mais rien n'y fait, l'exception persiste.
C'est pourquoi je me suis dit que le problème venait de IIS qui n'a peut-être pas les autorisations nécessaires pour effectuer certaines tâches (systèmes). Le problème est que je ne maîtrise pas bien IIS et que je ne vois pas bien où aller pour autoriser mon web service à partager un répertoire.

Que dois-je faire ?

Merci d'avance pour vos réponses,
Seb.

PS: Je pense que j'ai le même problème lorsque je veux spécifier un mot de passe pour un utilisateur Active Directory (méthode Invoke("SetPassword", new object[] { "pwd" });). Le message de l'exception est également : Accès refusé. Cela renforce mon idée du problème d'autorisation dans IIS. Ceci dans le même web service que spécifié plus haut.

9 réponses

DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011
17 mai 2006 à 09:58
J'ai enfin trouvé la solution. Elle concerne effectivement l'impersonation. Il fallait la mettre dans le code vu que dans le fichier de config ou dans la console IIS ca ne fonctionnait pas.
Si quelqu'un est intéressé, je veux bien mettre les lignes de codes qui permettent d'effectuer une impersonation.

Petit détail, l'impersonation telle que je l'ai faite ne fonctionne qu'avec Windows Server 2003. Je veux dire par là que j'ai essayé sur un Windows 2000 Server ca ne donne rien. La sécurité a dû être revue dans la nouvelle version. Par contre je ne sais pas si c'est IIS 6 ou Windows Server 2003 qui fait fonctionner le tout.

Pour ce qui est de la fonction "SetPassword" du client ldap, l'impersonation ne change rien, je ne peux toujours pas appeller cette fonction (Access Denied). A défaut de cette fonction, j'utilise "ChangePassword" qui demande des droits moins pointus.

Je n'ai toujours pas d'utilisateur ASPNET. Je pense que cet utilisateur est ajouté automatiquement avec Visual Studio (plus précisément, avec le serveur de développement) mais, dans mon cas, Visual Studio n'est pas installé sur le serveur web. Je n'ai donc que les deux utilisateur cités ci-dessus.

Merci de votre aide,
Seb.
3
zebobo5 Messages postés 273 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 6 février 2009 1
5 mai 2006 à 14:19
Salut,

Ton webservice n'a pas les droits nécéssaires donc :

Vas dans l'administration IIS, sur les propriétés ASP.Net,"Edit configuration", de ton répertoire qui contient ton webservice,
là tu as un onglet "Application", avec une propriété "Role impersonation" où tu lui donne le nom et mot de passe d'un utilisateur ayant les droit que doit utiliser ton webservice.

<hr>ZeBobo5
N'oubliez pas de cloturer votre post.
0
DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011
5 mai 2006 à 16:58
Merci pour ta réponse,
J'essairai cela lundi car je n'ai pas accès au serveur le week-end.

Seb.
0
DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011
8 mai 2006 à 11:36
Malheureusement, l'impersonation ne fonctionne pas. Je l'avais déjà essayée en tapant la ligne dans mon fichier web.config mais sans résultat. J'ai également essayé, comme tu me l'as conseillé, de le faire via la console IIS mais le même phénomène se produit : la connexion est interrompue (= message de l'exception).

Seb.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
13 mai 2006 à 00:22
Est-ce que l'utilisateur ASPNET à les droits ?

::|The S@ib|:: MVP C#.NET
0
DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011
13 mai 2006 à 08:02
Je n'ai pas d'utilisateur ASPNET. Les utilisateurs IIS sont IUSR_NomMachine et IWAM_NomMachine. J'ai déjà affecté tous les droits possibles à ces deux comptes mais rien ne change. Je les ai même fait agir en tant que système d'exploitation. Rien ne semble fonctionner.

Seb.
0
tanginthemiddle Messages postés 5 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 26 juin 2006
17 mai 2006 à 09:33
Il faut permettre à ASP.net d’emprunter une identité Windows (IUSR_machine et IWAM_machine). Dans le WebConfig, ajoute la ligne

<
identity


impersonate
=
"True"/>
0
phoenix_67 Messages postés 1 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 19 février 2007
19 févr. 2007 à 13:21
Bonjour,
J'ai exactement le même problème que toi, j'ai un service web qui accède au réseau pour lister le contenu d'un répertoire.
En utilisant le mode déboguage de visual studio 2005 mon application fonctionne parfaitement, mais en utilisant le serveur iis5 je n'arrive pas à faire fonctionner mon application (en ajoutant au fichier de configuration web.config, mon application ne fonctionne pas; en faisant un Impersonate dans le code mon application ne fonctionne pas mieux).
J'aurais voulu savoir :
1) si vous êtes arriver à faire fonctionner votre service web sur iis5.
2) avez-vous modifier quelque chose (code, parametres) pour que votre service web fonctionne sur iis6?
3) je serrais intéresser par les lignes de code que vous avez utiliser pour  l'impersonation.
Merci de vos réponses.
0
DjAdes Messages postés 38 Date d'inscription vendredi 31 mai 2002 Statut Membre Dernière intervention 6 juillet 2011
1 mars 2007 à 19:44
Avant toute chose, la programmation de cette application date de quelques temps. Je ne saurai donc pas assurer que ma réponse est totalement correcte!

1) Je ne pense pas être parvenu à faire fonctionner mes Web Services sur IIS 5.
2) Je ne me souviens pas avoir chnagé quelque chose en particulier pour faire fonctionner l'application sur IIS 6.
3) Voici la classe que j'ai écrite afin d'effectuer une impersonation :

using System;
using System.Data;
using System.Configuration;
using System.Runtime.InteropServices;

//using System.Web;
//using System.Web.Security;
//using System.Web.UI;
//using System.Web.UI.WebControls;
//using System.Web.UI.WebControls.WebParts;
//using System.Web.UI.HtmlControls;

/// <summary>
/// Classe permettant d'effectuer simplement une impersonation
/// </summary>
public class Impersonation
{
[DllImport("Advapi32.dll")]
private static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
Int32 dwLogonType,
Int32 dwLogonProvider,
out Int32 phToken
);

[DllImport("Advapi32.dll")]
private static extern int ImpersonateLoggedOnUser(
Int32 Token);

[DllImport("Advapi32.dll")]
private static extern int RevertToSelf();

/// <summary>
/// Active l'impersonation
/// </summary>
/// Nom de l'utilisateur auquel on va emprunter l'identité


/// Mot de passe de l'utilisateur


public static void activeImpers(string utilisateur, string pass)
{
// Try to impersonate
Int32 hToken;
bool log;

log = LogonUser(
utilisateur,
null,
pass,
2,
0,
out hToken
);

if (log == false)
{
int erreur = Marshal.GetLastWin32Error();
throw new Exception("Impossible de récupérer le jeton de l'utilisateur spécifié (code " + erreur + ")");
}

int Res;
Res = ImpersonateLoggedOnUser(hToken);

if (Res != 1)
{
throw new Exception("Impossible d'effectuer l'impersonation");
}
}

/// <summary>
/// Désactive une impersonation
/// </summary>
public static void desactiveImpers()
{
RevertToSelf();
}
}

J'espère avoir répondu assez clairement.

Seb.
0
Rejoignez-nous