我有一个 SOAP 信封,我想在一个请求中传递200 ID
s`。我已经创建了一个包含 200 个 ID 的列表,并将其传递给一个函数。
private static XmlDocument CreateSoapEnvelope(List<UniqueIDs> ID)
{
string hexURL = "http://hex.com/test/getResponse";
string hexUID = "user";
string hexPWD = "123456";
string uniqueID = ID.ToString();
string startTime = "2019-03-01T00:00:00+04:30";
string endTime = "2019-03-31T00:00:00+04:30";
string timestamp = DateTime.UtcNow.ToString("o");
string xml = @"<soapenv:Envelope
xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""
xmlns:soap=""http://soap.inf.hexing.cn"">
<soapenv:Header/>
<soapenv:Body>
<soap:doCommand>
<!--Optional:-->
<arg0><![CDATA[<?xml version=""1.0"" encoding=""UTF-8""?>
<RequestMessage xmlns=""http://iec.ch/TC57/2011/schema/message""
xmlns:m=""http://iec.ch/TC57/2011/MeterReadSchedule#""
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xsi:schemaLocation=""http://iec.ch/TC57/2011/schema/message Message.xsd"">
<Header>
<Verb>create</Verb>
<Noun>MeterReadSchedule</Noun>
<Revision>2.0</Revision>
<Timestamp>" + timestamp + @"</Timestamp>
<Source>Hesco</Source>
<AsyncReplyFlag>false</AsyncReplyFlag>
<ReplyAddress>" + hexURL + @"</ReplyAddress>
<AckRequired>false</AckRequired>
<User>
<UserID>" +hexUID+ @"</UserID>
</User>
<MessageID>String</MessageID>
<CorrelationID>String</CorrelationID>
<Property>
<Name>password</Name>
<Value>"+hexPWD+@"</Value>
</Property>
<Property>
<Name>timeout(h)</Name>
<Value>8</Value>
</Property>
</Header>
<Payload>
<m:MeterReadSchedule>
<m:EndDevice>
<m:mRID></m:mRID>
<Names>
<name>" + uniqueID + @"</name>
</Names>
</m:EndDevice>
<m:ReadingType>
<m:Names>
<m:name>MonthlyBilling</m:name>
<m:NameType>
<m:name>BillingType</m:name>
</m:NameType>
</m:Names>
</m:ReadingType>
<m:TimeSchedule>
<m:recurrencePeriod>86400</m:recurrencePeriod>
<m:scheduleInterval>
<m:end>" + endTime + @"</m:end>
<m:start>" + startTime + @"</m:start>
</m:scheduleInterval>
</m:TimeSchedule>
</m:MeterReadSchedule>
</Payload>
</RequestMessage>]]></arg0>
</soap:doCommand>
</soapenv:Body>
</soapenv:Envelope>";
XmlDocument soapEnvelopeDocument = new XmlDocument();
soapEnvelopeDocument.LoadXml(xml);
return soapEnvelopeDocument;
}
在上面的代码中,我将 ID 列表传递给函数。在该函数中,我添加了一个 XML 作为字符串。在此 XML 请求中,我想使用正确的标签传递这些 ID,如下所示
<m:EndDevice>
<m:mRID></m:mRID>
<Names>
<name>" + uniqueID[1] + @"</name>//
</Names>
</m:EndDevice>
<m:EndDevice>
<m:mRID></m:mRID>
<Names>
<name>" + uniqueID[2] + @"</name>//
</Names>
</m:EndDevice>
.
.
.
.
.
<m:EndDevice>
<m:mRID></m:mRID>
<Names>
<name>" + uniqueID[200] + @"</name>//
</Names>
</m:EndDevice>
我该怎么做?
任何帮助将不胜感激。
最佳答案
尝试使用 foreach。
string xml = @"<soapenv:Envelope
xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""
xmlns:soap=""http://soap.inf.hexing.cn"">
<soapenv:Header/>
<soapenv:Body>
<soap:doCommand>
<!--Optional:-->
<arg0><![CDATA[<?xml version=""1.0"" encoding=""UTF-8""?>
<RequestMessage xmlns=""http://iec.ch/TC57/2011/schema/message""
xmlns:m=""http://iec.ch/TC57/2011/MeterReadSchedule#""
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xsi:schemaLocation=""http://iec.ch/TC57/2011/schema/message Message.xsd"">
<Header>
<Verb>create</Verb>
<Noun>MeterReadSchedule</Noun>
<Revision>2.0</Revision>
<Timestamp>" + timestamp + @"</Timestamp>
<Source>Hesco</Source>
<AsyncReplyFlag>false</AsyncReplyFlag>
<ReplyAddress>" + hexURL + @"</ReplyAddress>
<AckRequired>false</AckRequired>
<User>
<UserID>" + hexUID + @"</UserID>
</User>
<MessageID>String</MessageID>
<CorrelationID>String</CorrelationID>
<Property>
<Name>password</Name>
<Value>" + hexPWD + @"</Value>
</Property>
<Property>
<Name>timeout(h)</Name>
<Value>8</Value>
</Property>
</Header>
<Payload>
<m:MeterReadSchedule>";
foreach (var x in ID)
{
xml+=@"<m:EndDevice>
<m:mRID></m:mRID>
<Names>
<name>" + x.ToString() + @"</name>
</Names>
</m:EndDevice>";
}
xml+= @"<m:ReadingType>
<m:Names>
<m:name>MonthlyBilling</m:name>
<m:NameType>
<m:name>BillingType</m:name>
</m:NameType>
</m:Names>
</m:ReadingType>
<m:TimeSchedule>
<m:recurrencePeriod>86400</m:recurrencePeriod>
<m:scheduleInterval>
<m:end>" + endTime + @"</m:end>
<m:start>" + startTime + @"</m:start>
</m:scheduleInterval>
</m:TimeSchedule>
</m:MeterReadSchedule>
</Payload>
</RequestMessage>]]></arg0>
</soap:doCommand>
</soapenv:Body>
</soapenv:Envelope>";
我认为您的 ToString 是一个重写方法。
希望有帮助。
关于c# - 使用 SOAP,如何在一个请求中传递多个 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55799389/