IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Créer un thread + callback pour faire une requete HTTP et obtenir le resultat.


Sujet :

Dotnet

  1. #1
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut Créer un thread + callback pour faire une requete HTTP et obtenir le resultat.
    Salut,

    Je voudrais pourvoir préciser la culture d'un thread car:
    • Un programme console .Net fait une requete http GET sur une page ASP3 vbscript pour réaliser un certain travail.
    • Ce programme est sur un serveur dont la culture est en-US.
    • Un des paramètres de l'URL est une date au format fr-FR: dd/MM/yyyy.
    • IIS interprète la date comme étant au format en-??: MM/dd/yyyy.
    • Je ne peux pas modifier la page qui reçoit la requete.

    Malheureusement, les méthodes du programme .Net admettent de nombreux paramètres et apparement ça ne convient pas au systèmes de thread.

    Est-ce que je me trompe?

    Devrais-je utiliser des variables avec une plus grande portée plutôt que de passer des paramètres?

    Merci de votre aide.

    A+

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    J'avoue avoir beaucoup de mal à faire la liaison entre ton problème initial (assez bien décrit : localization des paramètres d'une URL - même si je ne vois pas bien où est problème ici, puisqu'il suffit de spécifier la culture au moment de la transformation de ton objet DateTime en chaine pour la construction de ton url) et les threads.

    De plus, je ne comprends pas du tout ce que veux dire cette phrase :

    Malheureusement, les méthodes du programme .Net admettent de nombreux paramètres et apparement ça ne convient pas au systèmes de thread.

  3. #3
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Les URL n'ont pas de culture explicite. La culture est passée implicitement pas le client qui envoi les données. Or le mien est en en-US. La date doit toujours être formatée en dd/MM/yyyy.
    puisqu'il suffit de spécifier la culture au moment de la transformation de ton objet DateTime en chaine pour la construction de ton url
    Ceci ne pose pas de problème. Merci .Net.
    J'obtiens une url du type : http://<domaine>/page.asp?date=07/03/2009
    ISS comprend qu'il s'agit du 3 juillet au lieu du 7 mars.

    Il faut donc lui faire comprendre que le client est en fr-FR contrairement à la culture du serveur. Pour cela, créer un thread en fr-FR et lancer l'appel http.
    De plus, je ne comprends pas du tout ce que veux dire cette phrase
    Malheureusement, les méthodes du programme .Net admettent de nombreux paramètres et apparement ça ne convient pas au systèmes de thread.
    Cet appel se fait ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string Coucou(Uri uri){}
    En essayant de lancer un thread sur une telle méthode, je reçois le message d'erreur suivant:
    No overload for 'Coucou' matches delegate 'System.Threading.ThreadStart'
    A+

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pour le dernier point, c'est extrémement simple : les Thread ne peuvent se présenter que sous deux types de Delegate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Method() // Delegate ThreadStart
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Method(object param) // // Delegate  ParameterizedThreadStart
    Il suffit que tu modifies ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public string Coucou(Uri uri){}
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void Coucou(object oUri)
    {
      Uri uri = (Uri)oUri;
      // .... suite de la méthode
    }
    Puis faire un callback à la fin du thread pour renseigner la chaine calculée.

    Par ailleurs tu peux positionner le CurrentCulture au niveau du thread.

  5. #5
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Ca me semble pas mal.

    Citation Envoyé par Bluedeep Voir le message
    Puis faire un callback à la fin du thread pour renseigner la chaine calculée.
    Tu peux préciser ce qu'est un callback de thread? Je n'ai encore jamais fait de thread.

    Merci

    [EDIT]Bon, j'ai mis un "Sleep" (pas un slip! Enfin si... Bref)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ThreadStart deleg = new ThreadStart(PostData);
    Thread thread = new Thread(deleg);
    thread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
    thread.Start();
    Thread.Sleep(10000);
    Mais je prefererais pas fixer cette durée afin d'être certain d'avoir la réponse car le temps de traitement varie.
    [/EDIT]

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Points : 128
    Points
    128
    Par défaut
    Pour l'histoire du Sleep, je conseille l'utilisation de la méthode Join :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ThreadStart deleg = new ThreadStart(PostData);
    Thread thread = new Thread(deleg);
    thread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
    thread.Start();
    thread.Join();

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Ah oui, pas mal ça. Je commençais à me lancer dans ceci: http://msdn.microsoft.com/en-us/libr...ing.timer.aspx

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/06/2014, 16h05
  2. Aide pour faire une requete
    Par Msysteme dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 09/03/2010, 18h19
  3. Réponses: 5
    Dernier message: 28/09/2007, 17h56
  4. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22
  5. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo