gpt4 book ai didi

c# - 将自定义命名空间添加到 WCF 中的 soap 信封

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:10 25 4
gpt4 key购买 nike

我正在调用一个服务,它需要一个特定的命名空间添加到 soap 信封中。

例如这是我的示例常规 SOAP 消息

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:sec="ANOTHER NAMESPACE THAT I WANT TO ADD" >
<s:Header>

</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xyz xmlns="">
<customerId>2511</customerId>
</xyz>
</s:Body>
</s:Envelope>

我已经为某些其他目的实现了 IDispatchMessageInspector、IClientMessageInspector,我不确定我是否必须在那里做一些事情来添加额外的命名空间。

最佳答案

您可以将命名空间添加为自定义 Message 实现的一部分,其中包括您可以覆盖和添加任何自定义命名空间的 OnWriteStartEnvelope() 方法。然后将消息连接到 MessageFormatter,然后使用 MessageFormatAttribute 将行为附加到特定方法。

添加命名空间的关键方法在重写的 Message 实现上,您可以在其中将命名空间添加到信封:

protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
{
writer.WriteStartElement("soapenv", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
writer.WriteAttributeString("xmlns", "oas", null, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
writer.WriteAttributeString("xmlns", "v2", null, "http://www.royalmailgroup.com/api/ship/V2");
writer.WriteAttributeString("xmlns", "v1", null, "http://www.royalmailgroup.com/integration/core/V1");
writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
}

一旦附加到信封,文档的其余部分将重用这些顶级声明的命名空间,而不是内联命名空间。

我写了一篇博文,描述了涉及MessageMessageFormatterFormatMessageAttribute 实现的完整过程: http://weblog.west-wind.com/posts/2016/Apr/02/Custom-Message-Formatting-in-WCF-to-add-all-Namespaces-to-the-SOAP-Envelope

关于c# - 将自定义命名空间添加到 WCF 中的 soap 信封,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com