【发布时间】:2016-05-18 10:00:53
【问题描述】:
我正在尝试创建一个 ClientInspector,它将向传出的 SOAP 请求添加一些数据并将其添加为客户端服务的端点行为。像这样的:
public class InsertHeaderClientInspector : IClientMessageInspector
{
public object BeforeSendRequest(ref Message request, System.ServiceModel.IClientChannel channel)
{
var HeaderData = new ProcType()
{
attr = _correlation
};
MessageHeader header = MessageHeader.CreateHeader("HeaderInfo", "http://schemas.tempuri.fi/process/2016/04/", HeaderData);
request.Headers.Add(header);
return null;
}
}
[System.Xml.Serialization.XmlRootAttribute("HeaderInfo", Namespace = "http://schemas.tempuri.fi/process/2016/04/", IsNullable = false)]
public class ProcType
{
[XmlElement(Namespace = "")]
public string attr;
}
Inspector 工作正常,但问题是生成的 SOAP 消息将具有 ProcType.attr 的命名空间,我想将其删除。
<s:Header>
<HeaderInfo xmlns="http://schemas.tempuri.fi/process/2016/04/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<attr xmlns="http://schemas.datacontract.org/2004/07/MyService.Behaviors">asdasd</attr>
</HeaderInfo>
</s:Header>
应该是这样的
<s:Header>
<HeaderInfo xmlns="http://schemas.tempuri.fi/process/2016/04/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<attr">asdasd</attr>
</HeaderInfo>
</s:Header>
我尝试使用的 XMLElement 属性不起作用。那么如何删除这个不必要的命名空间呢?
【问题讨论】:
-
我认为这不能解决问题。 CreateHeader() 序列化 ProcType 对象并设置命名空间,我不认为我可以在构建标头后通过 MessageHeader 访问序列化的 xml 对象。
标签: c# .net web-services wcf soap