具有非.net存在客户端的WCF服务

时间:2011-12-03 09:49:51

标签: wcf soap datacontract xmlserializer soapheader

我不是通过生成的WSDL代码创建WCF服务和客户端,而是必须使用给定的SOAP请求创建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请求中进行任何更改,因为我们的客户也会将此请求用于许多其他公司。 这是我的问题。

  1. 如何将XML NutritionalValues内容映射到我的“DataContract”?
  2. 如何访问标头以验证来电者?
  3. 当我用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。

    我会非常感谢任何帮助!

0 个答案:

没有答案