首页新闻找找看学习计划

wcf 上传问题,无法读取stream

0
悬赏园豆:15 [待解决问题]

客户端采用纯Html方式提交form

 

 

服务器宿主

      <service name="Touch_Dinner.Service.FileService"  behaviorConfiguration="BasicBehavior" >
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="webStream"  behaviorConfiguration="AjaxBehavior" contract="Touch_Dinner.Contract.IFileService" />
      </service>

尝试过下面两种设置还是异常

     <webHttpBinding>
        <binding name="webStream"
               sendTimeout="00:10:00"
               transferMode="Streamed"
               maxReceivedMessageSize="9223372036854775807">
        </binding>
        <binding name="webBinding" closeTimeout="00:01:00"
                   openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                   bypassProxyOnLocal="false"  hostNameComparisonMode="StrongWildcard"
                   maxBufferPoolSize="524288" maxReceivedMessageSize="999999" useDefaultWebProxy="true"
                   allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
      </webHttpBinding>
        <behavior name="Asp.netAjaxBehavior">
          <webHttp/>
          <enableWebScript/>
        </behavior>

服务

此流不支持超时?

我发的图片文件只有10几k大小。

请问如何解决,似乎无法接收,求大神

Mr.Lin_♪的主页 Mr.Lin_♪ | 初学一级 | 园豆:3
提问于:2013-02-12 14:36
< >
分享
所有回答(6)
0

应该需要在配置上写一些配置

chenping2008 | 园豆:9836 (大侠五级) | 2013-02-12 15:34

请问怎么配置?有例子嘛?

支持(0) 反对(0) Mr.Lin_♪ | 园豆:3 (初学一级) | 2013-02-12 18:58
0

HttpRuntimeRequestLength

Angkor--:-- | 园豆:1086 (小虾三级) | 2013-02-13 00:38

默认4m吧,我上传10k的小图都不行。。。。。

支持(0) 反对(0) Mr.Lin_♪ | 园豆:3 (初学一级) | 2013-02-13 08:38
0

WCF并不支持Stream对象Length属性的序列化,也就是说,在客户端我们不能使用服务操作返回的Stream对象的Length属性。可使用

View Code
        public byte[] ReadFully (Stream stream)
        { 
            // 初始化一个32k的缓存 
            byte[] buffer = new byte[32768];
            using (MemoryStream ms = new MemoryStream())
            { //返回结果后会自动回收调用该对象的Dispose方法释放内存 
                // 不停的读取 
                while (true)
                {
                    int read = stream.Read(buffer, 0, buffer.Length);
                    // 直到读取完最后的3M数据就可以返回结果了 
                    if (read <= 0)
                        return ms.ToArray();
                    ms.Write(buffer, 0, read);
                }
            }
        }

这种方法是可以解决Wcf处理Stream 的length 问题,但同时有可能会引发内存溢出 问题,using (MemoryStream ms = new MemoryStream()),固然能使用using 释放,但文件流很大时还是会在释放前引发内存溢出。

所以推荐使用 byte[]数组,不用传Stream

geass.. | 园豆:1785 (小虾三级) | 2013-02-14 20:39
0

<readerQuotas maxDepth="64"
                          maxStringContentLength="2147483647"
                          maxArrayLength="2147483647"
                          maxBytesPerRead="2147483647"/>

Yu | 园豆:12944 (专家六级) | 2013-02-15 09:43
0

如果有时间你可以看一下我这个帖子

http://www.cnblogs.com/li-peng/archive/2012/11/29/2794715.html

是大数据提交的,提交图片也没问题

li-peng | 园豆:954 (小虾三级) | 2013-02-16 10:04
0

请问最后是怎么解决的?

pohreb | 园豆:96 (初学一级) | 2018-01-19 20:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册