使用C#将XML文档作为参数传递给Web服务

时间:2012-08-25 16:52:52

标签: c# xml web-services asmx

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

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

我正在尝试this,但我无法得到回应,而且我不确定我的代码是否有效=(

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();

也许有人有一个有效的例子?

1 个答案:

答案 0 :(得分:1)

403错误

如果您在尝试导入Web服务时获得403,这可能不是您的错。尝试 在Web浏览器中查看wsdl文件。如果您仍然收到403错误,则由于您没有使用该服务的权限,因此不再使用编码。

代码语法

此外,在您的代码中,您似乎无法在任何地方回读响应。您的上一条语句将XML写入流中,但您不会在任何地方回读响应。

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

<强> SOAP

如果您正在与之通信的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负载。