Skip to content

Commit 55d6cee

Browse files
FIXED: IE browser compatibility is again fixed by changing server response content type to text/plain, and the jquery post to expect 'text' back, so consistent text back is easier to parse into jquery DOM.
1 parent c8b4caa commit 55d6cee

3 files changed

Lines changed: 122 additions & 132 deletions

File tree

rqlconnector/RqlConnector.js

Lines changed: 89 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,116 +1,112 @@
11
function RqlConnector(LoginGuid, SessionKey) {
2-
this.LoginGuid = LoginGuid;
3-
this.SessionKey = SessionKey;
4-
this.DCOM = 'DCOM';
5-
this.DCOMProxyUrl = 'rqlconnector/rqlaction.asp';
6-
this.WebService11 = 'WebService11';
7-
this.WebService11ProxyUrl = 'rqlconnector/rqlactionwebservice.aspx';
8-
this.WebService11Url = '/CMS/WebService/RqlWebService.svc';
9-
this.RqlConnectionType = '';
10-
this.InitializeConnectionType();
2+
this.LoginGuid = LoginGuid;
3+
this.SessionKey = SessionKey;
4+
this.DCOM = 'DCOM';
5+
this.DCOMProxyUrl = 'rqlconnector/rqlaction.asp';
6+
this.WebService11 = 'WebService11';
7+
this.WebService11ProxyUrl = 'rqlconnector/rqlactionwebservice.aspx';
8+
this.WebService11Url = '/CMS/WebService/RqlWebService.svc';
9+
this.RqlConnectionType = '';
10+
this.InitializeConnectionType();
1111
}
1212

13-
RqlConnector.prototype.SetConnectionType =function (ConnectionType)
14-
{
15-
this.RqlConnectionType = ConnectionType;
13+
RqlConnector.prototype.SetConnectionType = function (ConnectionType) {
14+
this.RqlConnectionType = ConnectionType;
1615
}
1716

18-
RqlConnector.prototype.GetConnectionType =function ()
19-
{
20-
return this.RqlConnectionType;
17+
RqlConnector.prototype.GetConnectionType = function () {
18+
return this.RqlConnectionType;
2119
}
2220

23-
RqlConnector.prototype.InitializeConnectionType =function ()
24-
{
25-
if(this.GetConnectionType() == '')
26-
{
27-
if(this.TestConnection(this.WebService11Url))
28-
{
29-
this.SetConnectionType(this.WebService11);
30-
}else{
31-
this.SetConnectionType(this.DCOM);
32-
}
33-
}
21+
RqlConnector.prototype.InitializeConnectionType = function () {
22+
if (this.GetConnectionType() == '') {
23+
if (this.TestConnection(this.WebService11Url)) {
24+
this.SetConnectionType(this.WebService11);
25+
} else {
26+
this.SetConnectionType(this.DCOM);
27+
}
28+
}
3429
}
3530

36-
RqlConnector.prototype.SendRql = function(InnerRQL, IsText, CallbackFunc)
37-
{
38-
switch(this.GetConnectionType())
39-
{
40-
case this.DCOM:
41-
this.SendRqlCOM(InnerRQL, IsText, CallbackFunc);
42-
break;
43-
case this.WebService11:
44-
this.SendRqlWebService(InnerRQL, IsText, CallbackFunc);
45-
break;
46-
}
31+
RqlConnector.prototype.SendRql = function (InnerRQL, IsText, CallbackFunc) {
32+
switch (this.GetConnectionType()) {
33+
case this.DCOM:
34+
this.SendRqlCOM(InnerRQL, IsText, CallbackFunc);
35+
break;
36+
case this.WebService11:
37+
this.SendRqlWebService(InnerRQL, IsText, CallbackFunc);
38+
break;
39+
}
4740
}
4841

49-
RqlConnector.prototype.SendRqlWebService = function(InnerRQL, IsText, CallbackFunc)
50-
{
51-
var SOAPMessage = '';
52-
SOAPMessage += '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">';
53-
SOAPMessage += '<s:Body><q1:Execute xmlns:q1="http://tempuri.org/RDCMSXMLServer/message/"><sParamA>' + this.padRQLXML(InnerRQL, IsText) + '</sParamA><sErrorA></sErrorA><sResultInfoA></sResultInfoA></q1:Execute></s:Body>';
54-
SOAPMessage += '</s:Envelope>';
55-
56-
$.post(this.WebService11ProxyUrl, { rqlxml: SOAPMessage, webserviceurl: this.WebService11Url },
57-
function(data){
58-
var RetRql = $(data).find('Result').text();
59-
60-
if(IsText)
61-
{
62-
data = RetRql;
63-
}
64-
else
65-
{
66-
data = $.parseXML( $.trim(RetRql) );
67-
}
68-
69-
CallbackFunc(data);
70-
});
42+
RqlConnector.prototype.SendRqlWebService = function (InnerRQL, IsText, CallbackFunc) {
43+
var SOAPMessage = '';
44+
SOAPMessage += '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">';
45+
SOAPMessage += '<s:Body><q1:Execute xmlns:q1="http://tempuri.org/RDCMSXMLServer/message/"><sParamA>' + this.padRQLXML(InnerRQL, IsText) + '</sParamA><sErrorA></sErrorA><sResultInfoA></sResultInfoA></q1:Execute></s:Body>';
46+
SOAPMessage += '</s:Envelope>';
47+
48+
$.post(this.WebService11ProxyUrl, {rqlxml: SOAPMessage, webserviceurl: this.WebService11Url}, function (data) {
49+
data = $.trim(data);
50+
51+
var RetRql = $($.parseXML(data)).find('Result').text();
52+
RetRql = $.tr(RetRql);
53+
54+
if (IsText) {
55+
data = RetRql;
56+
}
57+
else {
58+
59+
data = $.parseXML(RetRql);
60+
}
61+
62+
CallbackFunc(data);
63+
}, 'text');
7164
}
7265

73-
RqlConnector.prototype.SendRqlCOM = function(InnerRQL, IsText, CallbackFunc)
74-
{
75-
var Rql = this.padRQLXML(InnerRQL, IsText);
76-
$.post(this.DCOMProxyUrl, { rqlxml: Rql },
77-
function(data){
78-
data = $('<div/>').append(data);
79-
CallbackFunc(data);
80-
});
66+
RqlConnector.prototype.SendRqlCOM = function (InnerRQL, IsText, CallbackFunc) {
67+
var Rql = this.padRQLXML(InnerRQL, IsText);
68+
$.post(this.DCOMProxyUrl, {rqlxml: Rql}, function (data) {
69+
data = $.trim(data);
70+
71+
if (IsText) {
72+
// do nothing
73+
}
74+
else {
75+
76+
data = $.parseXML(data);
77+
}
78+
79+
CallbackFunc(data);
80+
}, 'text');
8181
}
8282

83-
RqlConnector.prototype.padRQLXML =function (InnerRQL, IsText)
84-
{
85-
var Rql = '<IODATA loginguid="' + this.LoginGuid + '" sessionkey="' + this.SessionKey + '"';
86-
if(IsText)
87-
{
88-
Rql += ' format="1"';
89-
}
90-
91-
Rql += '>' + InnerRQL + '</IODATA>';
92-
93-
if(this.GetConnectionType(this.WebService11) == this.WebService11)
94-
{
95-
Rql = '<![CDATA[' + Rql + ']]>';
96-
}
97-
98-
return Rql;
83+
RqlConnector.prototype.padRQLXML = function (InnerRQL, IsText) {
84+
var Rql = '<IODATA loginguid="' + this.LoginGuid + '" sessionkey="' + this.SessionKey + '"';
85+
if (IsText) {
86+
Rql += ' format="1"';
87+
}
88+
89+
Rql += '>' + InnerRQL + '</IODATA>';
90+
91+
if (this.GetConnectionType(this.WebService11) == this.WebService11) {
92+
Rql = '<![CDATA[' + Rql + ']]>';
93+
}
94+
95+
return Rql;
9996
}
10097

101-
RqlConnector.prototype.TestConnection =function (Url)
102-
{
103-
var Isvalid = false;
98+
RqlConnector.prototype.TestConnection = function (Url) {
99+
var Isvalid = false;
104100
$.ajax({
105101
async: false,
106102
url: Url,
107-
success: function(){
108-
Isvalid = true;
103+
success: function () {
104+
Isvalid = true;
109105
},
110-
error: function(){
111-
Isvalid = false;
112-
}
106+
error: function () {
107+
Isvalid = false;
108+
}
113109
});
114-
115-
return Isvalid;
110+
111+
return Isvalid;
116112
}

rqlconnector/rqlaction.asp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
<%
2-
'Response.ContentType = "text/xml"
2+
Response.ContentType = "text/plain; charset=utf-8"
3+
4+
Session.Timeout = 180
5+
Server.ScriptTimeout = 180
36
47
Dim objIO 'Declare the objects
58
Dim xmlData, sError, retXml
6-
set objIO = Server.CreateObject("RDCMSASP.RdPageData")
7-
objIO.XmlServerClassName = "RDCMSServer.XmlServer"
89
9-
xmlData = Request.Form("rqlxml")
10-
11-
xmlData = objIO.ServerExecuteXml (xmlData, sError)
10+
On Error Resume Next
11+
Set objIO = Server.CreateObject("RDCMSASP.RdPageData")
12+
objIO.XmlServerClassName = "RDCMSServer.XmlServer"
13+
If Err.Number <> 0 Then
14+
Set objIO = Server.CreateObject("OTWSMS.AspLayer.PageData")
15+
End If
1216
17+
xmlData = Request.Form("rqlxml")
18+
xmlData = objIO.ServerExecuteXml (xmlData, sError)
1319
Set objIO = Nothing
14-
20+
1521
If xmlData = "" Then
16-
retXml = "<ERRORTEXT>" & sError & "</ERRORTEXT>"
22+
retXml = "<ERRORTEXT>" & sError & "</ERRORTEXT>"
1723
Else
18-
retXml = xmlData
24+
retXml = xmlData
1925
End If
20-
26+
2127
Response.Write(retXml)
22-
%>
28+
%>

rqlconnector/rqlactionwebservice.aspx

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
<%@ Page Language="C#" validateRequest="false" Debug="false" %>
2-
<%@ Import Namespace="System" %>
3-
<%@ Import Namespace="System.Net" %>
4-
<%@ Import Namespace="System.Xml" %>
5-
<%@ Import Namespace="System.Web" %>
1+
<%@ Page Language="C#" validateRequest="false" %>
62
<script runat="server">
7-
public class RqlWebServiceConnector
3+
public class RqlWebServiceConnector
84
{
95
public string SendRql(string Rql)
106
{
11-
HttpContext.Current.Response.ContentType = "text/xml; charset=utf-8";
7+
HttpContext.Current.Response.ContentType = "text/plain; charset=utf-8";
128
return SendRqlToWebService(Rql);
139
}
1410
@@ -17,32 +13,27 @@
1713
if (string.IsNullOrEmpty(Rql))
1814
return "";
1915
20-
string WebServiceUri = GetWebServiceUrl();
16+
string WebServiceUri = this.GetWebServiceUrl();
2117
22-
string Response = SendRqlToWebService(WebServiceUri, Rql);
18+
string Response = this.SendRqlToWebService(WebServiceUri, Rql);
2319
2420
return Response;
2521
}
2622
2723
private string SendRqlToWebService(string WebServiceUrl, string Rql)
2824
{
29-
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(
25+
System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(
3026
delegate
3127
{
3228
return true;
3329
}
3430
);
3531
3632
string Response = "";
37-
WebClient oWC = new WebClient();
33+
System.Net.WebClient oWC = new System.Net.WebClient();
3834
oWC.Headers.Add("Content-Type", "text/xml; charset=utf-8");
3935
oWC.Headers.Add("SOAPAction", "http://tempuri.org/RDCMSXMLServer/action/XmlServer.Execute");
40-
/*
41-
string PostData = "";
42-
PostData += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
43-
PostData += "<s:Body><q1:Execute xmlns:q1=\"http://tempuri.org/RDCMSXMLServer/message/\"><sParamA>" + XmlEscape(Rql) + "</sParamA><sErrorA></sErrorA><sResultInfoA></sResultInfoA></q1:Execute></s:Body>";
44-
PostData += "</s:Envelope>";
45-
*/
36+
4637
try
4738
{
4839
Response = oWC.UploadString(WebServiceUrl, Rql);
@@ -55,14 +46,19 @@
5546
return Response;
5647
}
5748
58-
private string GetWebServiceUrl()
49+
public string GetWebServiceUrl()
5950
{
6051
if (HttpContext.Current.Session["WebServiceUrl"] == null)
6152
{
62-
HttpContext.Current.Session["WebServiceUrl"] = HttpContext.Current.Request.Url.Scheme + ":" + "//" + HttpContext.Current.Request.Url.Authority + "/cms/WebService/RqlWebService.svc";
53+
HttpContext.Current.Session["WebServiceUrl"] = HttpContext.Current.Request.Url.Scheme + ":" + "//" + "localhost" + "/cms/WebService/RqlWebService.svc";
6354
Uri WebServiceUri = new Uri(HttpContext.Current.Session["WebServiceUrl"].ToString());
6455
65-
string Response = SendRqlToWebService(WebServiceUri.ToString(), "");
56+
string Rql = "";
57+
Rql += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
58+
Rql += "<s:Body><q1:Execute xmlns:q1=\"http://tempuri.org/RDCMSXMLServer/message/\"><sParamA></sParamA><sErrorA></sErrorA><sResultInfoA></sResultInfoA></q1:Execute></s:Body>";
59+
Rql += "</s:Envelope>";
60+
61+
string Response = this.SendRqlToWebService(WebServiceUri.ToString(), Rql);
6662
6763
if(Response == "")
6864
{
@@ -79,14 +75,6 @@
7975
8076
return HttpContext.Current.Session["WebServiceUrl"].ToString();
8177
}
82-
83-
private string XmlEscape(string unescaped)
84-
{
85-
XmlDocument doc = new XmlDocument();
86-
XmlNode node = doc.CreateElement("root");
87-
node.InnerText = unescaped;
88-
return node.InnerXml;
89-
}
9078
}
9179
</script>
9280
<%

0 commit comments

Comments
 (0)