-
Notifications
You must be signed in to change notification settings - Fork 0
/
webservice-proxy.aspx
95 lines (74 loc) · 2.77 KB
/
webservice-proxy.aspx
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<%@Page ContentType="text/xml" debug="true" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Xml" %>
<%
/*
* Esse proxy
* - recebe a URL externa via querystring (GET)
* - recebe os parâmetros (Soap Envelope em XML) a serem enviados para a URL externa via (POST)
* - escreve o resultado na tela
* - retorna o resultado como XML
*
* Mais informações:
* http://msdn.microsoft.com/en-us/library/debx8sh9.aspx
*/
//Recebe o endereço URL final via querystring
string webserviceAddress = HttpUtility.UrlDecode(Request.QueryString.ToString());
string soapEnvelope = null;
string soapResult = null;
if (webserviceAddress != "")
{
//recebe os parâmetros enviados via POST
soapEnvelope = Request.Form.ToString();
if (!string.IsNullOrEmpty(soapEnvelope)) {
soapEnvelope = System.Web.HttpContext.Current.Server.UrlDecode(soapEnvelope);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(webserviceAddress);
// pode ser necessario utilizar uma das linhas abaixo dependendo do Webservice
//webRequest.Headers.Add(@"SOAP:Action");
//webRequest.Headers.Add(@"SOAPAction:");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
XmlDocument soapEnvelopeXml = new XmlDocument();
soapEnvelopeXml.LoadXml(soapEnvelope);
using (Stream stream = webRequest.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
WebResponse response = null;
try
{
response = webRequest.GetResponse();
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
soapResult = rd.ReadToEnd();
}
}
catch (WebException wex)
{
// Caso ocorra erro HTTP 500 entao deve obter resposta no objeto WebException
response = wex.Response;
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
soapResult = rd.ReadToEnd();
}
Response.Write(soapResult);
Response.End();
}
if (soapResult != null) {
XmlDocument doc = new XmlDocument();
doc.LoadXml(soapResult);
System.Text.StringBuilder sb = new StringBuilder();
XmlWriterSettings xwsSettings = new XmlWriterSettings();
xwsSettings.Indent = false;
xwsSettings.NewLineChars = String.Empty;
XmlWriter xwWriter = XmlWriter.Create(sb, xwsSettings);
doc.Save(xwWriter);
xwWriter.Close();
Response.Write(doc.InnerXml);
Response.End();
}
}
}
%>