我必须创建一个 Web 服务来从第三方公司检索信息。他们有一个 soap xml 的示例,我已经能够使其匹配,但标题部分除外。我在我的 asp.net 网络应用程序中创建了一个 webservice.asmx 来格式化他们将要发送的内容。
[WebService(
Namespace = "",
Name = "TheRequest")]
public class WebService1 : WebService
{
public HeaderData HeaderData { get; set; }
[SoapHeader ("ReplyTo", Required = true)]
[WebMethod]
public string TheirRequest(string username, string password, string data)
{
if (HeaderData.To == null ||
HeaderData.ReplyTo.Address == null ||
HeaderData.MessageID == null ||
HeaderData.Action == null)
throw new SoapException("Required information not provided",
SoapException.ClientFaultCode);
if (username.ToLower() == "username" &&
password.ToLower() == "password")
return "SUCCESS";
else
throw new SoapException("Unrecognized login",
SoapException.ClientFaultCode);
}
}
public class HeaderData : SoapHeader
{
public string To;
public ReplyTo ReplyTo { get; set; }
public string MessageID;
public string Action;
}
public class ReplyTo
{
public string Address;
}
如下设置 xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soap="">
<soap:Header>
<HeaderData xmlns="">
<To>string</To>
<MessageID>string</MessageID>
<Action>string</Action>
<ReplyTo>
<Address>string</Address>
</ReplyTo>
</HeaderData>
</soap:Header>
<soap:Body>
<TheirRequest xmlns="">
<username>string</username>
<password>string</password>
<data>string</data>
</TheirRequest>
</soap:Body>
</soap:Envelope>
他们需要将通话格式化为什么
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="">
<soapenv:Header xmlns:wsa="">
<wsa:To>[customer provided URL]</wsa:To>
<wsa:ReplyTo>
<wsa:Address>http:...</wsa:Address>
</wsa:ReplyTo>
<wsa:MessageID>3DBF4F1510689894919</wsa:MessageID>
<wsa:Action>urn:submitMessage</wsa:Action>
</soapenv:Header>
<soapenv:Body>
<sub:TheirRequest xmlns:sub="">
<sub:username>customer_provided_username</sub:username>
<sub:password>customer_provided_password</sub:password>
<sub:data>Base64 encoded XML request</sub:data>
</sub:TheirRequest>
</soapenv:Body>
</soapenv:Envelope>
有几点不同:
<soap:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soap
需要<soapenv:Envelope xmlns:soapenv
<soap:Header> <HeaderData xmlns="">
需要<soapenv:Header xmlns:wsa="">
有什么方法可以设置它以匹配它,以便我们可以处理他们的电话吗?或者有什么方法可以设置 SOAP 标头以不管他们发送什么而只关心正文?任何帮助将不胜感激。
我能够让它工作。
第一部分是差异#1 无关紧要。唯一重要的部分是命名空间是正确的。命名空间如何命名以供引用并不重要。
第二部分是差异 #2 不必在标题标语上。它可以设置为标题中的每个项目。我找不到将其设置为标题标语的方法。
<soap:Header>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>string</Address>
</ReplyTo>
</soap:Header>
这是如何完成的,当我声明 SoapHeader 字段时,我单独设置了命名空间。
[XmlRoot(Namespace = "http://www.w3.org/2005/08/addressing")]
public class ReplyTo : SoapHeader
{
public string Address;
}