Dar*_*dar 6 c# serialization web-services
我正在使用第三方Web服务客户端(使用"添加服务引用"创建)以检索某些数据.
在使用适当的数据填充Web服务对象后,我们需要向标头添加一些数据(加密密码和一些其他预定义数据)
然后,我们使用标准.net序列化发送到Web服务的每个请求XmlSerializer.
但是,在序列化的结果中,我没有看到请求的标头.我已经搜索了很长时间,也找不到任何方法来"打印"它们.
这是一些示例代码:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经排除了为请求添加更多数据的代码,因为它很长而且复杂(需要在发送之前实现IEndpointBehavior并IClientMessageInspector"捕获"请求) - 但是目前作为一种解决方法我在Message对象上放置了一个BreakPoint并进行转换使用Visual Studio将其转换为字符串.通过这种方式,我确实看到了标题,但显然这是不好的做法,因为我希望它在序列化中自动化.
我想看看如何添加这些标头的示例。
在大多数 Web 服务中,消息正文是序列化为 XML 或 JSON 的部分,而标头则不然。
您可以使用 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>
Run Code Online (Sandbox Code Playgroud)
在调用服务时下载并运行 Fiddler,您应该可以在 Fiddler 中看到并能够检查调用。
如果您想检查和/或修改代码库中的标头,可以考虑实现 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-消息检查器
这是我所做的一个实现。我不需要访问标头,而是修改服务客户端创建的 xml 命名空间,但它应该让您了解如何实现:How can I create custom XML namespace attribute when using a Legacy SOAP service ?