Déploiement d'un web service dans IIS 5 [Résolu]

Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Dernière intervention
6 juillet 2011
- 4 mai 2006 à 11:05 - Dernière réponse :
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
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.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Dernière intervention
6 juillet 2011
- 17 mai 2006 à 09:58
3
Merci
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.

Merci DjAdes 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de DjAdes
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
6 février 2009
- 5 mai 2006 à 14:19
0
Merci
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.
Commenter la réponse de zebobo5
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Dernière intervention
6 juillet 2011
- 5 mai 2006 à 16:58
0
Merci
Merci pour ta réponse,
J'essairai cela lundi car je n'ai pas accès au serveur le week-end.

Seb.
Commenter la réponse de DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Dernière intervention
6 juillet 2011
- 8 mai 2006 à 11:36
0
Merci
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.
Commenter la réponse de DjAdes
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Dernière intervention
26 décembre 2007
- 13 mai 2006 à 00:22
0
Merci
Est-ce que l'utilisateur ASPNET à les droits ?

::|The S@ib|:: MVP C#.NET
Commenter la réponse de TheSaib
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Dernière intervention
6 juillet 2011
- 13 mai 2006 à 08:02
0
Merci
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.
Commenter la réponse de DjAdes
Messages postés
5
Date d'inscription
mardi 16 mai 2006
Dernière intervention
26 juin 2006
- 17 mai 2006 à 09:33
0
Merci
Il faut permettre à ASP.net d’emprunter une identité Windows (IUSR_machine et IWAM_machine). Dans le WebConfig, ajoute la ligne

<
identity


impersonate
=
"True"/>
Commenter la réponse de tanginthemiddle
Messages postés
1
Date d'inscription
jeudi 19 mai 2005
Dernière intervention
19 février 2007
- 19 févr. 2007 à 13:21
0
Merci
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.
Commenter la réponse de phoenix_67
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Dernière intervention
6 juillet 2011
- 1 mars 2007 à 19:44
0
Merci
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.
Commenter la réponse de DjAdes

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.