【问题标题】:Custom soap header with proxy code generated from SVCUTIL带有从 SVCUTIL 生成的代理代码的自定义 soap 标头
【发布时间】:2017-09-20 23:23:47
【问题描述】:

我有一个向第三方网络服务提交数据的程序。他们正在实现双因素身份验证,我必须创建一个 nonce 密钥(使用 NewGuid),他们提供了一个编码的 API 密钥,以及一个屏幕名称、URL 和时间戳。

我已经创建了随机数,然后使用 api 密钥对数据进行签名,最后,我将得到一个长字符串,例如:

2017-04-15T17:08:57Z-1265fb1e-bbc3-453a-be409e2a808cbaaeWpyp6EJnIUlSX1rB/YRJxRyp8cXxw2IIrFMnnvuB06cUBabyRLnD 5hPj+ndH8zSIhojvNgc10/az2N+hh6SaMA=

它声明它将在名为 X-WME-API-Token 的 HTTP 标头中发送。

我们有一个 MeterDataService.cs 文件,它是从创建代理客户端的 SVCUTIL 命令行工具生成的。我没有看到可以添加客户标题的任何地方。

我知道如果你有从 WebRequest 派生的东西,你可以做这样的事情:

     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlString);

    req.ContentType = "text/xml";
    req.Headers["X-SPP-API-Token"] = Token;
    req.Method = "POST";

但是,生成的对象都不是从 WebRequest 派生的,所以我不确定如何执行此操作。

一个对象,即 MeterDataPortClient 对象,有一个 Endpoint 属性。那是我会做的地方吗?我怎么做?我想这是我的问题。

我确实尝试通过从 WebRequest 继承来修改他们创建的 MeterDataRequest 对象,但随后出现此错误:

“PostMeterDataRequest 类型定义了 MessageContract,但也派生自未定义 MessageContract 的 System.Net.WebRequest 类型。PostMeterDataRequest 继承层次结构中的所有对象都必须定义 MessageContract。”

这是 PostMeterDataRequest 的定义,我看到 MessageContractAttribute 被应用于该类。我只是不熟悉这意味着什么。我只需要找到一种方法在将 HTTP 标头发送到 Web 服务之前将其添加到请求对象,因为接收端的服务希望令牌位于 HTTP 标头中,我不知道如何将其放入我手头的代码。

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
public partial class PostMeterDataRequest : WebRequest   // WebRequest added my me later on.
{

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://someorg.com/schema/MeterDataSchema/v2", Order = 0)]
    public PostMeterDataType PostMeterData;

    public PostMeterDataRequest()
    {
    }

    public PostMeterDataRequest(PostMeterDataType PostMeterData)
    {
        this.PostMeterData = PostMeterData;
    }
}

【问题讨论】:

    标签: c# header uri


    【解决方案1】:

    终于找到了解决办法。这是我以前从未找到过的这篇较早的帖子,但它确实有效。

    How to add Custom HTTP Header for C# Web Service Client

    按照第一个答案中的指示效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 2014-04-27
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多