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

Web & réseau Delphi Discussion :

[SOAP SERVER] Fournir des fichiers en réponse (.html, .js, .css)


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Par défaut [SOAP SERVER] Fournir des fichiers en réponse (.html, .js, .css)
    Bonjour,

    j'avais commencé un WebService (isapi) sous delphi 2007 que j'ai intégré finalement dans une application stand alone SoapServer avec Delphi XE.

    j'appelle le service depuis une page web et un objet javascript XmlHttpRequest.
    en ISAPI, pas de problèmes, le serveur me renvoie mes pages et l'isapi traite mes demandes. Mais deux points noirs se présentent à moi maintenant :

    1. IIS ne me distribue plus que mes pages web... un peu lourd pour des pages statiques.
    2. XMLHttpRequest ne peut faire de requêtes cross-domain (par exemple localhost/monscript.js ne peut faire une demande à mon serveur soap en localhost:8080/ )

    j'aimerais donc que mon service soap puisse répondre à une demande de page (localhost:8080/index.htm ou monscript.js)

    est-ce seulement possible ?

    j'arrive à traiter une demande de page spécifique grâces aux "Actions" du TWebModule, mais quand je renvoie mon fichier de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    procedure TWMMonService.WMMonServiceGetFileAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    var
      fichier : TFileStream;
    begin
      if(FileExists(vars.initDir+Request.PathInfo))then
      begin
        try
          fichier := TFileStream.Create(vars.initDir+Request.PathInfo, fmOpenRead or fmShareDenyWrite);
          Response.SendStream(fichier);
          Response.SendResponse;
          Handled:=True;
        finally
          FreeAndNil(fichier);
        end;
      end else
        Trace('fichier '+vars.initDir+Request.PathInfo+' inexistant');
    end;
    mon navigateur m'affiche bien le résultat mais avec un petit plus :

    <html>
    ... ma page web ... <- ça c'est bon ^^
    </html>
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/html; charset=ISO-8859-1
    Content-Length: 0

    <HTML><BODY><B>200 OK</B></BODY></HTML>
    je n'en suis pas loin, mais les informations du SOAP me plantent mes .js ^^

    je dois certainement passer par un autre objet, ou alors utiliser autre chose que Response.SendStream mais je pêche totalement...

    un petit coup de pouce serait le bienvenu ^^

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Utilise plutôt du JSON !
    Tu récupéreras des objets JS directement désérialisé depuis le message reçu
    Le SOAP doit être utilisé par un client SOAP, développé en PHP ou Delphi par exemple, je ne connais pas d'utilisation en JS

    Tu peux faire une indirection, ton application ISAPI reçoit l'URL

    Sinon, c'est pas l'inverse dans le message ?
    d'abord le texte concernant le protocole HTTP puis le code HTML ?
    Tu dis que c'est bon, euh, je n'en suis pas si sûr


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/html; charset=ISO-8859-1
    Content-Length: ????
     
    <html>
    ... ma page web ... <- ça c'est bon ^^
    </html>

    utilise SetContentStream et non SendStream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         fichier := TFileStream.Create(vars.initDir+Request.PathInfo, fmOpenRead or fmShareDenyWrite);
          Response.SetContentStream(fichier);
          Response.SendResponse;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Par défaut Yesss ^^
    héhé ^^

    tu sais mettre le doigt ou ça fait mal !

    j'ai retiré le SendMessage qui me renvoyait un complement 200 OK et avec Response.content l'ordre et bien respecté !

    par contre le header reste en Content/type html, du coup mon css est rejeté par le navigateur...

    du coup j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    procedure TWMMonService.WMMonServiceGetFileAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    var
      fichier : TStringList;
    begin
      Handled:=True;
      if(FileExists(vars.initDir+Request.PathInfo))then
      begin
        try
          case AnsiIndexStr(ExtractFileExt(Request.PathInfo), ['.html', '.htm', '.js', '.css', '.jpg', '.jpeg', '.png']) of
            0..1 :
              Response.SetCustomHeader('Content-Type', 'text/html');
            2 :
              Response.SetCustomHeader('Content-Type', 'text/javascript');
            3 :
              Response.SetCustomHeader('Content-Type', 'text/css');
            4..5 :
              Response.SetCustomHeader('Content-Type', 'image/jpeg');
            6 :
              Response.SetCustomHeader('Content-Type', 'image/x-png');
            else
              Response.SetCustomHeader('Content-Type', 'text/plain');
          end;
          fichier := TStringList.Create;
          fichier.LoadFromFile(vars.initDir+Request.PathInfo);
          Response.Content := fichier.Text;
        finally
          FreeAndNil(fichier);
        end;
      end else
        Trace('fichier '+vars.initDir+Request.PathInfo+' inexistant');
    end;
    Et là c'est l'explosion dans mon navigateur !! ma page s'affiche, les styles, puis les scripts qui requestionnent le serveur, remplissent la page... un bonheur total !!

    Par contre maintenant il me faut me replonger dans les sessions... mon DataModule ne supporte actuellement pas d'être questionné par plusieurs personnes en même temps...

    J'ouvre un nouveau sujet,

    Merci !!

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

Discussions similaires

  1. Wget - télécharger des fichiers non-html
    Par narmataru dans le forum Réseau
    Réponses: 10
    Dernier message: 14/07/2018, 15h20
  2. recupéré le nom des fichier depuis un html
    Par badibad dans le forum Langage
    Réponses: 19
    Dernier message: 09/08/2012, 13h15
  3. Lire des fichiers Word en Html "FireFox"
    Par dot-_-net dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 30/08/2009, 14h36
  4. Encodage des fichiers ASPX vs Encodage réponse HTML ?
    Par Benzeghiba dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/01/2009, 22h21
  5. [SQL SERVER] Executer des fichier .sql
    Par olbi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/07/2007, 15h43

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