我必须使用给定的 SOAP 请求创建 WCF 服务,而不是通过生成的 WSDL 代码创建 WCF 服务和客户端。
为了帮助您更好地理解,我在此处复制了 SOAP 请求的主要部分:
<?xml version="1.0" encoding="windows-1252"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<HeaderContent xmlns="CustomerNamespace.com">
<CallerId>6274</CompanyId>
<Login>mylogin</Username>
<Password>mypassword</Password>
<ResponsibilityType>3</Responsibility>
<ResponsibilityId>189281728</ResponsibilityId>
</HeaderContent>
</soap:Header>
<soap:Body>
<UpdateNutritionalValues xmlns="CustomerNamespace.com">
<NutritionalValues>
<Product id="195739241">
<Created>2011-11-01</Created>
<Owner>8633</Owner>
.
.
.
所以,我的服务会收到这个 SOAP 请求。嵌入的NutritionalValues
XML 很长,我根本无法在soap 请求中更改任何内容,因为我们的客户也将此请求用于许多其他公司。这是我的问题。
- 如何将 XML
NutritionalValues
内容映射到我的“DataContract”? - 如何访问标头以验证调用方?
当我使用 Fiddler 使用手工生成的 SOAP 请求调试我的服务时,我收到一个空参数值
[ServiceContract(Namespace="CustomerNamespace.com")]
public interface IWCFService
{
[OperationContract]
ComplexType UpdateNutritionalValues(NutritionalValues nutVal);
}
[DataContract]
public class NutritionalValues
{
[DataMember(Name="Product")]
public ProductSpecification Product { get; set; }
}
[DataContract]
public class ProductSpecification
{
[DataMember(Name="Created")]
public DateTime Created { get; set; }
[DataMember(Name="Owner")]
public int Owner { get; set; }
}
(我也可以手动反序列化 XML)但我不知道如何访问(原始?) XML。
我将非常感谢任何帮助!