请注意,此问题与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生成的客户端。 (连接服务)
答案 0 :(得分:4)
看起来.NET Core版本对此更加挑剔。无论如何,我设法使用自定义编码器来解决它。
我从Github偷偷偷走了CustomTextMessageEncoder。我添加了以下方法:
public override bool IsContentTypeSupported(string contentType)
{
return true;
}
从同一个地方偷走CustomTextMessageBindingElement
和CustomTextMessageEncoderFactory
。
我通过创建自定义绑定添加它们(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核心中不是原生的。
答案 2 :(得分:0)
我也有同样的问题。与安全性或内容类型格式的差异可能存在问题。我通过忽略ServiceReference绑定解决了这个问题。您应该直接致电 HttpWebRequest 作为样本;
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>