内容类型text / xml;响应消息的charset =“utf-8”与绑定的内容类型不匹配(text / xml; charset = utf-8)

时间:2017-01-16 20:17:58

标签: c# wcf http .net-core

请注意,此问题与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 vs“utf-8”)?

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

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

3 个答案:

答案 0 :(得分:4)

看起来.NET Core版本对此更加挑剔。无论如何,我设法使用自定义编码器来解决它。

我从Github偷偷偷走了CustomTextMessageEncoder。我添加了以下方法:

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

从同一个地方偷走CustomTextMessageBindingElementCustomTextMessageEncoderFactory

我通过创建自定义绑定添加它们(basicBinding是我以前的绑定):

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

答案 1 :(得分:0)

将WCF客户端转换为dotnet核心后,我得到了完全相同的错误。我必须重构一些。我将绑定代码替换为此。注意WsBinding在dotnet核心中不是原生的。

https://github.com/dotnet/wcf/issues/1370

答案 2 :(得分:0)

我也有同样的问题。与安全性或内容类型格式的差异可能存在问题。我通过忽略ServiceReference绑定解决了这个问题。您应该直接致电 HttpWebRequest 作为样本;

<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>