gpt4 book ai didi

c# - 如何将对象序列化为 string\xml 及其 header

转载 作者:太空狗 更新时间:2023-10-29 22:00:12 25 4
gpt4 key购买 nike

我正在使用第三方 Web 服务客户端(通过使用“添加服务引用”创建)来检索一些数据。

用适当的数据填充 Web 服务对象后,我们需要向 header 添加一些数据(加密密码和一些其他预定义数据)

然后,我们使用标准的 .net XmlSerializer 序列化发送到 Web 服务的每个请求。

但是,在序列化结果中我没有看到请求的 header 。我已经搜索了很长时间,也找不到任何方法来“打印”它们。

下面是一些示例代码:

Ibooking proxy = new BookingManager();

/* Init proxy Data...*/
GetAvailabilityRequest request = new GetAvailabilityRequest();

/*Fill more data on the request...*/
GetAvailabilityResponse response = proxy.GetAvailability(request); //Send request to the web service
var xmlString2 = response.Serialize(); //only body, no headers in the XML


/* Extension class to Serialize any object */
public static class ExtensionUtil
{
public static string Serialize<T>(this T value)
{
try
{
XmlSerializer xmlserializer = new XmlSerializer(typeof(T));
var stringWriter = new StringWriter();
using (var writer = XmlWriter.Create(stringWriter))
{
xmlserializer.Serialize(writer, value);
return stringWriter.ToString();
}
}
catch (Exception ex)
{
throw new Exception("An error occurred", ex);
}
}
}

我已经排除了向请求添加更多数据的代码,因为它又长又复杂(需要实现 IEndpointBehaviorIClientMessageInspector 以在我们之前“捕获”请求发送它) - 但目前作为一种解决方法,我在 Message 对象上放置了一个 BreakPoint 并使用 Visual Studio 将其转换为字符串。通过这种方式,我确实看到了 header ,但显然这是不好的做法,因为我希望它在序列化过程中自动进行。

最佳答案

我想看看您如何添加这些 header 的示例。

在大多数网络服务中,消息正文是序列化为 XML 或 JSON 的部分 - header 不是。

您可以使用 Fiddler 和代理来检查服务调用,方法是在您的 web.config 中稍作更改,如本文所述:http://weblog.west-wind.com/posts/2008/Mar/14/Debugging-Http-or-Web-Services-Calls-from-ASPNET-with-Fiddler .

简短的版本是将以下内容添加到您的 web.config 或 app.config 中:

    <system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>

在调用服务时下载并运行 Fiddler,您应该可以在 Fiddler 中看到并能够检查调用。

如果您想检查和/或修改代码库中的 header ,可以考虑实现 IClientMessageInspector 或 IDispatchMessageInspector。以下是关于该主题的几篇文章:

https://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iclientmessageinspector(v=vs.100).aspx http://weblogs.asp.net/paolopia/writing-a-wcf-message-inspector

这是我做的一个实现。我不需要访问 header ,而是修改服务客户端创建的 xml namespace ,但它应该让您了解如何执行:How can I create custom XML namespace attributes when consuming a legacy SOAP service?

关于c# - 如何将对象序列化为 string\xml 及其 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38940471/

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