我是C#的新手,运行简单的SOAP Web服务,该Web服务将此返回给我:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getBillsResponse xmlns:ns2="http://obrs/">
<return>
<errorID>7</errorID>
</return>
</ns2:getBillsResponse>
</S:Body>
</S:Envelope>
我的代码用于调用Web服务:
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
Console.WriteLine("certificate:" + certificate.GetName() + " sslPolicyErrors:" + sslPolicyErrors);
return true;
};
BankWebService.BillingServerService myService = new BankWebService.BillingServerService();
myService.getBill("1","2","3","4","5");
Console.WriteLine("ok");
Console.ReadLine();
我想为getBill输出编写这个C#代码:
if (errorID == 7) then do something...
我该如何实现?
答案 0 :(得分:1)
如果你的SOAP是任何东西,你的代理代码应该已经有了定义。
你应该可以这样做:
BankWebService.BillingServerService myService = new BankWebService.BillingServerService();
GetBillsResponse response = // <----------------- NEW
myService.getBill("1","2","3","4","5");
我想为getBill输出编写这个C#代码:
if (errorID == 7) then do something...
上面有response
后,您可以简单地:
var errorID = response.Return.ErrorID;
将您的SOAP填入xmltocsharp我得到
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp
{
[XmlRoot(ElementName="return")]
public class Return {
[XmlElement(ElementName="errorID")]
public string ErrorID { get; set; }
}
[XmlRoot(ElementName="getBillsResponse", Namespace="http://obrs/")]
public class GetBillsResponse {
[XmlElement(ElementName="return")]
public Return Return { get; set; }
[XmlAttribute(AttributeName="ns2", Namespace="http://www.w3.org/2000/xmlns/")]
public string Ns2 { get; set; }
}
[XmlRoot(ElementName="Body", Namespace="http://schemas.xmlsoap.org/soap/envelope/")]
public class Body {
[XmlElement(ElementName="getBillsResponse", Namespace="http://obrs/")]
public GetBillsResponse GetBillsResponse { get; set; }
}
[XmlRoot(ElementName="Envelope", Namespace="http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope {
[XmlElement(ElementName="Body", Namespace="http://schemas.xmlsoap.org/soap/envelope/")]
public Body Body { get; set; }
[XmlAttribute(AttributeName="S", Namespace="http://www.w3.org/2000/xmlns/")]
public string S { get; set; }
}
}
答案 1 :(得分:0)
Visual Studio有一个为您解析XML文件的功能:
Solution Explorer
中,右键单击您所在项目的名称
要添加服务,然后点击添加Service Reference
。Advanced
按钮。Web
Reference
。URL box
中,输入要使用的网络服务的URL
。Web services found at this URL box
中,选择要使用的Web服务
使用。Web reference name field
中,输入您要使用的名称
您的代码以编程方式访问所选的Web服务。Add Reference
。使用上面的教程允许visual studio将webservice添加到你的项目中,只要你需要它,你只需调用webservice(无论你在web引用名称字段中放置什么)并从中创建一个对象(创建一个实例)从它),你可以很容易地使用如下方法:
using(WebService.MainClass obj = new WebService.MainClass())
{
int id = obj.GetId("Method Inputs");
return id;
}
答案 2 :(得分:-1)
您需要解析XML以提取所需的字段。有很多方法可以做到这一点。一种方法是使用XmlDocument();
例如,您提供的XML和必填字段;
private static int ParseErrorIdField(string xml)
{
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
var errorIdField = xmlDoc.SelectSingleNode("//*[contains(name(),'errorID')]");
if (errorIdField == null)
{
//couldn't find field in xml
//return parsing error
return -1;
}
int errorId;
if (!int.TryParse(errorIdField.InnerText, out errorId))
{
//Could not convert field to integer
//raise error
return -1;
}
return errorId;
}