具有非 .net 当前客户端的 WCF 服务

发布于 2024-12-19 11:16:34 字数 1906 浏览 2 评论 0原文

我必须使用给定的 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 非常长,我根本无法根据肥皂请求更改任何内容,因为我们的客户也为许多其他公司使用此请求。 这是我的问题。

  1. 如何将 XML NutritionalValues 内容映射到我的“DataContract”?
  2. 如何访问标头来验证调用者的身份?

当我使用 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。

我将非常感谢任何帮助!

Instead of creating a WCF service and a client by generated code of WSDL, I must create a WCF service with a given SOAP request.

To help you better understand, I copied the main part of the SOAP request here:

<?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>
        .
        .
        .

So, my service will receive this SOAP request. The embedded NutritionalValues XML is very long and I cannot change anything at the soap request at all because our customer use this request for many other companies as well.
And this is my problem.

  1. How do I map the XML NutritionalValues content to my "DataContract"?
  2. How do I access the Header to authenticate the caller?

When I debug my Service with a handcrafted generated SOAP request with Fiddler I receive a null parameter value

[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; }
}

( I can deserialize the XML manually too ) but i dont know how to access the ( raw? ) XML.

I would be very thankful for any help !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文