我正在尝试通过使用SOAP使用.NET Core 2.0中的Web服务。该Web服务的客户端是使用Visual Studio的“连接服务”功能生成的。
现在,我遇到了问题,Web服务需要在请求中的(第一行)编码属性:
<?xml version="1.0" encoding="utf-8"?>
我尝试了多种方法在output-XML中编写此行,但是没有任何效果。
我使用定制的消息检查器(通过实现IClientMessageInspector)向客户端添加了新的端点行为(通过实现IEndpointBehavior)。通过调试我发现,消息对象包含上述行。但是通过将传出的XML写入Web服务,该行丢失了。
我编写了一个具有wsdl导出扩展名的自定义消息编码绑定元素(通过使用MessageEncodingBindingElement和IWsdlExportExtension)。此绑定元素使用自定义的MessageEncoder,在其中明确设置了编码。我将绑定添加到生成的客户端。
以下是一些.net 4.6代码片段:
// Binding for the client
TextMessageBindingElement textBindingElement = new TextMessageBindingElement();
textBindingElement.Encoding = "utf-8";
textBindingElement.MessageVersion = MessageVersion.Soap11;
textBindingElement.MediaType = "text/xml";
bindingElements.Add(textBindingElement);
CustomBinding binding = new CustomBinding(bindingElements);
// Customized Message Binding Element for encoding
public class TextMessageBindingElement : MessageEncodingBindingElement,
IWsdlExportExtension {
public override MessageVersion MessageVersion { get; set; }
public string Encoding { get; set; }
...
public override MessageEncoderFactory CreateMessageEncoderFactory() {
return new TextMessageEncoderFactory(MediaType, Encoding, MessageVersion);
}
void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context) {
}
void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context) {
TextMessageEncodingBindingElement mebe = new TextMessageEncodingBindingElement();
mebe.MessageVersion = this.msgVersion;
((IWsdlExportExtension) mebe).ExportEndpoint(exporter, context);
}
}
在.NET 4.6中可以使用,但是.NET Core 2.0不支持IWsdlExportExtension。我在寻找替代品,但还没有找到任何东西。
请,有人可以帮助我吗?