0

我正在使用 C# 在 Visual Studio .Net 2010 上创建一个 Windows 应用程序。互联网上有一个使用 API 方法的有效 Web 服务。这是其中之一的示例,它们使用 SOAP 消息:因此,您在此 SOAP 请求中输入用户名和密码字符串:

POST /anp.asmx HTTP/1.1
Host: api.anp.se
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://api.anp.se/GetOptOutList"

<?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>
    <GetOptOutList xmlns="http://api.anp.se/">
      <strUsername>string</strUsername>
      <strPassword>string</strPassword>
      <strMailingListID>string</strMailingListID>
    </GetOptOutList>
  </soap:Body>
</soap:Envelope>

SOAP 响应的格式如下所示:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?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>
    <GetOptOutListResponse xmlns="http://api.anp.se/">
      <GetOptOutListResult>
        <xsd:schema>schema</xsd:schema>xml</GetOptOutListResult>
    </GetOptOutListResponse>
  </soap:Body>
</soap:Envelope>

当您单击调用按钮时,在线服务会返回一个 XML 数据集,这是结果的片段:

<DataSet xmlns="http://api.anp.se/">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Report">
<xs:complexType>
<xs:sequence>
<xs:element name="SendQueueID" type="xs:int" minOccurs="0"/>
<xs:element name="SendTime" type="xs:dateTime" minOccurs="0"/>
<xs:element name="Subject" type="xs:string" minOccurs="0"/>
<xs:element name="SubscriberCount" type="xs:int" minOccurs="0"/>
<xs:element name="MailingList" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Report diffgr:id="Report1" msdata:rowOrder="0">
<SendQueueID>1235163</SendQueueID>
<SendTime>2011-06-20T12:26:54.25+02:00</SendTime>
<Subject>Tack för din bokning</Subject>
<SubscriberCount>939</SubscriberCount>
<MailingList>Tack för din bokning 2011-06-20</MailingList>
</Report>
<Report diffgr:id="Report2" msdata:rowOrder="1">
<SendQueueID>1235146</SendQueueID>
<SendTime>2011-06-20T12:15:55.62+02:00</SendTime>
<Subject>Välkommen hem</Subject>
<SubscriberCount>688</SubscriberCount>
<MailingList>Välkommen hem 2011-06-20</MailingList>
</Report>
<Report diffgr:id="Report3" msdata:rowOrder="2">
<SendQueueID>1235128</SendQueueID>
<SendTime>2011-06-20T12:08:54.277+02:00</SendTime>
<Subject>Trevlig resa</Subject>
<SubscriberCount>832</SubscriberCount>
<MailingList>Trevlig resa 2011-06-20</MailingList>
</Report>
<Report diffgr:id="Report4" msdata:rowOrder="3">
<SendQueueID>1232232</SendQueueID>
<SendTime>2011-06-17T12:07:54.767+02:00</SendTime>
<Subject>Tack för din bokning</Subject>
<SubscriberCount>398</SubscriberCount>
<MailingList>Tack för din bokning 2011-06-17</MailingList>
</Report>

如果您向我推荐一个教程,请确保它直截了当并且很有用,因为我已经看到了很多对我没有帮助的教程。我需要处理数据集。如何获取数据集对象以及如何访问其中的数据?我是否必须向我的项目添加服务首选项?应该是什么类型的 .Net 项目?提前致谢。

4

1 回答 1

2

几乎任何类型的 C# 项目都应该可以工作。您只需右键单击项目并选择“添加服务引用”。然后你可以把网址放到地址文本框中,给它一个名字,然后点击确定。这应该创建一个服务代理类,其中包含您需要的所有内容,包括服务返回的所有类。

我已经很久没有这样做了。这个非常基本的示例使用 Dilbert Web 服务:

DilbertSoapClient client = new DilbertSoapClient();
string s = client.DailyDilbert(DateTime.Now);
DataTable table = new DataTable();
StringReader reader = new StringReader(s);
table.ReadXml(reader);
foreach (DataRow row in table.Rows)
{
    // do something with the row
}

当然,我没有你实际使用的webservice,所以处理它可能会有所不同,但这是基本模型。

于 2012-10-16T20:42:06.913 回答