C# webservie 传递一个大型byte数据,服务报错

C# webservie 传递一个大型byte数据(几十M),服务报错

System.ServiceModel.CommunicationException: 接收对 h**p://****:6941/UploadData.asmx 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参见服务器日志。 ---> System.Net.WebException: 基础连接已经关闭: 接收时发生错误。 ---> System.IO.IOException: 无法从传输连接中读取数据: 您的主机中的软件中止了一个已建立的连接。。 ---> System.Net.Sockets.SocketException: 您的主机中的软件中止了一个已建立的连接。
在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
在 System.Net.HttpWebRequest.MakeMemoryStream(Stream stream)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Net.HttpWebRequest.GetResponse()
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- 内部异常堆栈跟踪的结尾 ---

//调用webservice,数据处理接口,这里是循环调用这个方法的
//reciveData这个就是要传递的byte数据
var ClientData = new UpdateData.UploadDataSoapClient();
string info = ClientData.UploadDataFile(reciveData, PROCTYPE, i);
最新回答
西瓜小姐

2024-11-07 00:43:20

我遇到过这类问题vxbg原因应该是你的update语句。你的sql语句的update 某列= 某值a本来是正确的40但是如果用来修改二进制数据就不行gko你可以修改成参数形式的sql语句例如:update [表名] set [列名] = @param1 where [列名] = 某值SqlParameter[] parameters = {     new SqlParameter("@Image"28 SqlDbType.Image)};原因是存储的数据类型是byte型imqu普通的方式保存维数型数据无法完整保存到数据库。所以必须采用参数方式。在举个例子:url传递值,没有见过传递数组的。可以尝试使用Image数据类型保存数据
追问
这里还没用到数据库操作,只是读取
惹我细心溺屎身亡

2024-11-07 00:32:48

用代理类也这样?确定是由于大数据量引发的吗?(就是小数据量时不会报错)
追问
小数据 不会有问题,  前面两个文件都很小,第三个文件就很大了  一下子就报错了
追答
Byte[]在XML里,应该是每一位都会有一个TargetName吧,要不换一种传输方法,将Byte[]按16进制输出成String,这样传能减少很多文本量,可以试试看
追问
设置最大byte就行了,你的比较接近
有奶便是娘

2024-11-07 00:12:01

就服务器给出的错误提示,可能原因如下:
1. h**p://****:6941/UploadData.asmx 的服务断开了
2. 基础连接已经关闭
检查如下:
1. 在IE直接打开这个服务地址
2. 如果能打开,用数据测试下能否成功
3. 如果成功,那么请检查你在程序中所传递的byte数据,看是否符合web服务的参数规则
黄色的月亮

2024-11-07 00:34:58

亲,会不会是你引用服务有问题,,,导致端口根本就没打开过,,,
追问
都已经接受了几个小数据的内容了,一到大数据就报错了