gpt4 book ai didi

c# - 内容类型 text/xml;响应消息的字符集 ="utf-8"与绑定(bind)的内容类型不匹配(文本/xml;字符集=utf-8)

转载 作者:可可西里 更新时间:2023-11-01 16:09:14 26 4
gpt4 key购买 nike

请注意,此问题与 WCF 连接服务的 .NET Core 实现有关。

我正在将一个常规的 .NET WCF 客户端移植到 .NET Core,但我遇到了这个问题:

The content type text/xml; charset="utf-8" of the response message does
not match the content type of the binding (text/xml; charset=utf-8).

If using a custom encoder, be sure that the IsContentTypeSupported method is
implemented properly. The first 1024 bytes of the response were:
'<?xml version='1.0' encoding='UTF-8'?> [...]

响应确实包含引号:

HTTP/1.1 200 Ok
content-type: text/xml; charset="utf-8"

我从来没有在 WCF 中做任何特别的事情来处理这个问题。这是 .NET Core 版本中的一个错误,还是它真的特定于内容类型(utf-8 与“utf-8”)?

如何更改预期的内容类型以匹配我调用的服务? (我无法控制它,但如果需要,我可以复制和更改 WSDL)。

我正在使用 svcutil 生成的客户端。 (连接服务)

最佳答案

.NET Core 版本似乎确实对此更加挑剔。无论如何,我设法使用自定义编码器解决了这个问题。

我公然从 Github 偷走了 CustomTextMessageEncoder .我添加了以下方法:

public override bool IsContentTypeSupported(string contentType)
{
return true;
}

并从同一个地方窃取了 CustomTextMessageBindingElementCustomTextMessageEncoderFactory

我通过创建自定义绑定(bind)来添加它们(basicBinding 是我之前拥有的绑定(bind)):

var customBindingElement = new CustomTextMessageBindingElement("UTF-8", "text/xml", MessageVersion.Soap11);
var binding = new CustomBinding(basicBinding);
binding.Elements.RemoveAt(0);
binding.Elements.Insert(0, customBindingElement);
var client = (T2)Activator.CreateInstance(typeof(T), binding, address);

我在动态生成代理时使用 Activator。只需替换为对 WCF 生成的客户端的调用。

两个放错地方的引号需要做很多工作 :D

关于c# - 内容类型 text/xml;响应消息的字符集 ="utf-8"与绑定(bind)的内容类型不匹配(文本/xml;字符集=utf-8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684342/

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