OVH Cloud OVH Cloud

Redirection d'une requette HTTP

2 réponses
Avatar
mentionaretirer_hervejuge
Bonjour,

L'architecture de mon projet poss=E8de une DMZ priv=E9e avec mon serveur
de rapport (MS reporting services) =E0 l'int=E9rieur.

Mon serveur IIS est dans une DMZ public.
Je dois afficher un rapport pdf g=E9n=E9r=E9 par MS reporting services.

La seul solution que j'ai trouv=E9 c'est rediriger la requette HTTP de
mon navigateur vers le serveur de rapports dans ma DMZ mais mon code
(ci-dessous) ne donne pas de r=E9sultat !

Uri myUri =3Dnew
Uri("http://c31210/ReportServer?/rapportsTEST/facture&NUMCLIENT=3D039871328=
&rs:Format=3DPDF");
HttpWebRequest oWRequest =3D(HttpWebRequest) WebRequest.Create(myUri);
HttpWebResponse oWResponse =3D(HttpWebResponse) oWRequest.GetResponse();
Stream oS =3D oWResponse.GetResponseStream();
StreamReader oSReader =3D new StreamReader(oS,System.Text.Encoding.UTF8);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType =3D "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;
filename=3Dfacture.pdf");
Response.Write(oSReader.ReadToEnd());
oSReader.Close();
oS.Close();

Si quelqu'un =E0 une id=E9e, je le remercie d'avance.
Herv=E9.

2 réponses

Avatar
Patrice Manac'h
Bonjour,

cela donne une vision assez restreinte de votre architecture et de vos
contraintes :)

Eventuellement, je pourrai toujours vous préconiser, si vous aviez ISA comme
FW, de publier votre site RS privé comme site public, mais bon...

Tout d'abord, si vous sauvegardez le résultat de oSReader.ReadToEnd() dans
un fichier local au serveur, que trouvez vous ?

Cdt,

Patrice Manac'h
MCS France


a écrit dans le message de news:

Bonjour,

L'architecture de mon projet possède une DMZ privée avec mon serveur
de rapport (MS reporting services) à l'intérieur.

Mon serveur IIS est dans une DMZ public.
Je dois afficher un rapport pdf généré par MS reporting services.

La seul solution que j'ai trouvé c'est rediriger la requette HTTP de
mon navigateur vers le serveur de rapports dans ma DMZ mais mon code
(ci-dessous) ne donne pas de résultat !

Uri myUri =new
Uri("http://c31210/ReportServer?/rapportsTEST/facture&NUMCLIENT9871328&rs:Format=PDF");
HttpWebRequest oWRequest =(HttpWebRequest) WebRequest.Create(myUri);
HttpWebResponse oWResponse =(HttpWebResponse) oWRequest.GetResponse();
Stream oS = oWResponse.GetResponseStream();
StreamReader oSReader = new StreamReader(oS,System.Text.Encoding.UTF8);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;
filenameúcture.pdf");
Response.Write(oSReader.ReadToEnd());
oSReader.Close();
oS.Close();

Si quelqu'un à une idée, je le remercie d'avance.
Hervé.
Avatar
mentionaretirer_hervejuge
Le fichier que je récupère avec cette méthode ne ressemble pas au
fichier source, quelque soit l'encodage utilisé !

Avec le code ci-dessous, j'obtiens le même fichier à la différence
près que j'ai en plus le code HTML de la page appelante à la fin.

HttpWebRequest oWRequest =(HttpWebRequest)
WebRequest.Create("http://c31210/ReportServer?/rapports/facture&NUMFACTURE 12186360&PDF=True&rs:Format=PDF&rc:LinkTarget=_top&rc:JavaScript úlse&rc:Toolbarúlse");

//la réponse
HttpWebResponse oWResponse =(HttpWebResponse) oWRequest.GetResponse();
int iBytesToRead = (int)oWResponse.ContentLength;
Stream oS = oWResponse.GetResponseStream();
int n;
byte[] buffer = new byte[iBytesToRead];
int iBytesRead = 0;
while (iBytesToRead > 0)
{
// La Fonctio Read Renvoie 0 ou le nombre d'octets à lire
n = oS.Read(buffer, iBytesRead, iBytesToRead);
// La fin du fichier a été atteinte
if (n == 0)
{
break;
}
iBytesRead += n;
iBytesToRead -= n;
}
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;
filenameúcture.pdf");
Response.BinaryWrite(buffer);
oS.Close();
oWResponse.Close();

Merci pour vos idées.