C# Soap服务抛出;反应过早结束,至少<;X>;需要额外的字节。”;(例外情况)
我正在将代码从asp.net迁移到core 3.1。 我在使用Soap服务时遇到以下问题: 当我调用服务的方法时,我得到一个IOException,其中包含以下消息: “响应提前结束,至少需要额外的字节。” 数字是无法从响应流读取的字节数(剩余字节)C# Soap服务抛出;反应过早结束,至少<;X>;需要额外的字节。”;(例外情况),c#,asp.net-core,soap,.net-core,gzip,C#,Asp.net Core,Soap,.net Core,Gzip,我正在将代码从asp.net迁移到core 3.1。 我在使用Soap服务时遇到以下问题: 当我调用服务的方法时,我得到一个IOException,其中包含以下消息: “响应提前结束,至少需要额外的字节。” 数字是无法从响应流读取的字节数(剩余字节) 响应用gzip压缩 在ASP.Net代码中,Soap服务方法是一个同步方法,而核心中的方法是异步方法 此外,在从.WSDL文件创建服务之后,我需要将Reference.cs文件中的服务的基本URL从http更改为https,因为所有响应都返回重
- 响应用gzip压缩
- 在ASP.Net代码中,Soap服务方法是一个同步方法,而核心中的方法是异步方法
var customBinding = new BasicHttpsBinding
{
MaxReceivedMessageSize = 20000000,
MaxBufferPoolSize = 20000000,
AllowCookies = false,
BypassProxyOnLocal = false,
ReaderQuotas = XmlDictionaryReaderQuotas.Max,
TextEncoding = Encoding.UTF8
};
customBinding.CreateBindingElements().AddRange(
new HttpsTransportBindingElement
{
MaxReceivedMessageSize = 20000000,
MaxBufferSize = 20000000,
});
_service = new masterPricerPortTypeClient(customBinding, new EndpointAddress("https://..."));
_service.Endpoint.Binding = customBinding;
之后,我可以在网络跟踪器中看到该请求得到了有效响应,但是当我试图处理响应时,我得到了上面的IOException
我试图从服务客户端调用操作:
SearchReply searchReply = await _service.SearchAsync(searchRequest);
但我在上面这行代码中得到了一个例外
我试图通过HttpWebRequest调用该方法:
using (var resp = (HttpWebResponse)webRequest.GetResponse())
{
using (var contentStream = resp.GetResponseStream())
{
contentStream.ReadTimeout = 1000;
var bufferSize = 2048;
var buffer = new byte[bufferSize];
var result = new List<byte>();
try
{
var readBytes = 0;
while ((readBytes = contentStream.ReadAsync(buffer).Result) != 0)
{
for (int i = 0; i < readBytes; i++)
{
result.Add(buffer[i]);
}
}
使用(var resp=(HttpWebResponse)webRequest.GetResponse()
{
使用(var contentStream=resp.GetResponseStream())
{
contentStream.ReadTimeout=1000;
var bufferSize=2048;
var buffer=新字节[bufferSize];
var result=新列表();
尝试
{
var readBytes=0;
而((readBytes=contentStream.ReadAsync(buffer.Result)!=0)
{
for(int i=0;i
但是在执行了一些读取操作之后,我在“while”循环中得到了异常
是否有人遇到此问题或可以提供帮助?响应标题是什么?是否有内容长度标题?是的,内容长度标题包含soap响应中的字符数(而不是字节数)。如果是这种情况,则服务器违反了协议。请参阅:“当允许消息正文的消息中给出内容长度时,其字段值必须与消息正文中的八位字节数完全匹配。HTTP/1.1用户代理必须在收到和检测到无效长度时通知用户。“谢谢。好的,如果我从soap服务的响应中得到这个头,我该怎么办?修复服务。或者使用TcpClient来实现服务器正在使用的非标准协议。