У меня есть веб-сервис, который я звоню из C #.Мне удалось успешно получить ответ с помощью простых запросов GET, таких как:
http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=describeprocess&identifier=test
Однако при выполнении более сложных запросов ответ всегда является ошибкой.
http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=execute&identifier=test&datainputs=[key1=val1,val2,val3;key2=val4;key3=val5]
Веб-сервисы, которые я вызываю, публикуются с использованием PyWPS, и используемые мной строки запроса действительны, если они размещены в браузере.
Я пытался экранировать все значения в парах ключ-значение:
e.g. "datainputs=[key1="+Uri.EscapeDataString("val1"), ...
Я также пробовал комбинации
HttpUtility.UrlEncode
и
HttpUtility.UrlPathEncode
Я получаю ошибки, такие как: Exception exceptionCode = "MissingParameterValue" locator = "key1"
Я не уверен, что делаю неправильно, но эти URL работают правильно в моем браузеретак что я подозреваю, что я их неправильно кодирую.Мне не удалось найти ни одного сообщения, в котором одна пара ключ-значение содержит список пар ключ-значение (т. Е. Datainputs = [key1 = v1, v2, v2; ... и т. Д.)
Любая помощь по этому вопросу приветствуется.
Редактировать: Вот как я звоню в веб-службу
var targetUri = new Uri(uri);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(targetUri);
req.Method = method.ToUpper();
req.ContentLength = 0;
req.ContentType = "text/xml";
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string responseString = reader.ReadToEnd();
reader.Close();
responseStream.Close();
response.Close();
return responseString;