Привет всем!
Столкнулся с такой проблемой:
Есть веб-метод, к примеру:
[WebMethod]
public void GetString(string myString)
{
}
И когда он вызывается не Net'овским клиентом, а с помощью msxml, то при передаче строки символы "+" меняются на пробелы.
Вот примерный код клиентского вызова:
msxml::IXMLDOMDocument2Ptr m_pXmlDoc;
msxml::IXMLHTTPRequestPtr m_pXmlReq;
m_pXmlDoc.CreateInstance ("MSXML2.DOMDocument");
m_pXmlReq.CreateInstance ("MSXML2.XMLHTTP");
bstr_t m_strWebServiceURL="http://localhost/Service1.asmx";
bstr_t strMethod="UploadGDB";
bstr_t strParam="myString=1++++1";
bstr_t strResponse="";
bstr_t strURL = m_strWebServiceURL + "/" + strMethod;
HRESULT hr=m_pXmlReq->open("post", strURL, FALSE);
hr=m_pXmlReq->setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
hr=m_pXmlReq->send((_variant_t)strParam);
Как это можно побороть?
30.06.03 00:18: Перенесено модератором из '.NET' в XML/SOAP. — ХД
S>Как это можно побороть?
закодировать строку url-encoding'ом
реализация на с++ :
string urlencode_string(string source) {
char* hexdigits="0123456789ABCDEF";
const char* csource=source.c_str();
string dest;
for(int i=0;i<source.size();i++)
if(csource[i]>='0' && csource[i]<='9' ||
(csource[i]>='a' && csource[i]<='z') ||
(csource[i]>='A' && csource[i]<='Z'))
dest+=csource[i];
else if(csource[i]==' ')
dest+='+';
else {
char d1,d2;
d1=csource[i]>>4;
d2=csource[i]-(d1<<4);
dest+='%';
dest+=hexdigits[d1];
dest+=hexdigits[d2];
}
return dest;
}