0

我必须将 XML 文档作为参数发送,以使用 Post 方法请求 WebRequest 并获得响应。Web 服务实现以下方法:

public string Register(XmlDocument register){...}

我正在尝试这样做但我无法得到响应,我不确定我的代码是否正常工作 =(

HttpWebRequest request = HttpWebRequest.Create("http://ws2.sti.gov.kg/TRKService/PatentService.asmx/Register") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

Encoding ex = Encoding.GetEncoding("iso-8859-1");
XmlDocument doc = new XmlDocument();
doc.LoadXml("<foo><bar>baz</bar></foo>");
string rawXml = doc.OuterXml;

string requestText = string.Format("register={0}", HttpUtility.UrlEncode(rawXml, ex));

Stream requestStream = request.GetRequestStream();
StreamWriter requestWriter = new StreamWriter(requestStream, ex);
requestWriter.Write(requestText);            
requestWriter.Close();

也许有人有一个可行的例子?

4

1 回答 1

1

403 错误

如果您在尝试导入 Web 服务时收到 403,这可能不是您的错。尝试在 Web 浏览器中查看 wsdl 文件。如果您仍然收到 403 错误,那么他们将不再使用编码,因为您无权使用该服务。

代码语法

此外,在您的代码中,您似乎没有在任何地方读回响应。您的最后一条语句将 XML 写入流,但您没有在任何地方读回响应。

requestWriter.Write(requestText);            
requestWriter.Close();

肥皂

如果您正在与之通信的 Web 服务是基于 SOAP 的,那么您的 XML 有效负载需要符合 SOAP 标准。您上面的示例代码使用了非常基本的 XML,可能是因为它只是一个示例,但是要使其正常工作,您将需要具有以下格式的请求

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetWeather xmlns="http://www.webserviceX.NET">
      <CityName>string</CityName>
      <CountryName>string</CountryName>
    </GetWeather>
  </soap:Body>
</soap:Envelope>

不是

<foo><bar>baz</bar></foo>

同样,您显然仅使用 foo 作为示例,但这也可能是问题的根源,因此请检查您发送的实际 XML 有效负载。

于 2012-08-25T18:09:45.470 回答