使用Silverlight/WCF将大型文件上载到数据库

使用Silverlight/WCF将大型文件上载到数据库,silverlight,wcf,Silverlight,Wcf,我有一个Silverlight应用程序,它使用位于web项目中的WCF服务。我在服务中有一个方法,可以将文件以二进制格式上传到数据库。。。这一切都适用于高达6MB的文件,但当我超过该限制时,我会得到一个错误“远程服务器返回了一个错误:NotFound”。这并不能告诉我多少 我已经打开了跟踪和日志记录,没有收到任何错误/消息。我认为上传/传输大小有一个设置,但我不知道会在哪里。我把web.config中的某些设置搞砸了,但没有成功 我怎样才能超过这个限制 编辑:也许我应该首先发布我的代码,我已经设

我有一个Silverlight应用程序,它使用位于web项目中的WCF服务。我在服务中有一个方法,可以将文件以二进制格式上传到数据库。。。这一切都适用于高达6MB的文件,但当我超过该限制时,我会得到一个错误“远程服务器返回了一个错误:NotFound”。这并不能告诉我多少

我已经打开了跟踪和日志记录,没有收到任何错误/消息。我认为上传/传输大小有一个设置,但我不知道会在哪里。我把web.config中的某些设置搞砸了,但没有成功

我怎样才能超过这个限制

编辑:也许我应该首先发布我的代码,我已经设置了所有建议的尺寸(并且一直都有)


正如您现在看到的,我所能想到的所有内容都已设置为足够大的大小,可以处理超过6MB的数据,但我仍然会遇到此错误

编辑:错误

内部异常:

{System.Net.WebException:远程服务器返回错误:NotFound。--> System.Net.WebException:远程服务器返回错误:NotFound。“ &vbCrLf&“位于System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)” &vbCrLf&“在System.Net.Browser.BrowserHttpWebRequest.c_DisplayClass5.b_4(对象发送状态)” &vbCrLf&“位于System.Net.Browser.AsyncHelper.c_DisplayClass4.b_1(对象发送状态)” &vbCrLf&“--内部异常堆栈跟踪的结束----”&vbCrLf&“
位于System.Net.Browser.AsyncHelper.BeginNoui(SendOrPostCallback beginMethod,对象状态)” &vbCrLf&“位于System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)” &vbCrLf&“在System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteTResponse(IAsyncResult结果)}

在弹出的错误窗口中,它还建议:

InnerException:检查异常的Response属性以确定请求失败的原因。 InnerException:检查异常的Status属性以确定请求失败的原因

响应属性说明:{System.NotImplementedException:此类未实现此属性。&vbCrLf&“位于System.Net.HttpWebResponse.get_Cookies()}

状态只是说:WebExceptionStatus.UnknownError(HttpStatusCode.NotFound)

堆栈跟踪:

位于System.Net.Browser.AsyncHelper.BeginNoui(SendOrPostCallback beginMethod,对象状态) 位于System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteTResponse(IAsyncResult结果)

如果超时,您可以更新custombinding。我假设Web.config中会有类似的内容:

<bindings>
  <customBinding>
    <binding name="CustomBinding_HelloWorldService">
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
    </binding>
  </customBinding>
</bindings>

如果是这样,您可以更新绑定(我只是在这里将其设置为10分钟):



如果您想进一步了解这一点:

您的问题的解决方案很简单,因为它是默认值
,我认为是4mb,据我所知,它提供了WCF服务在一次调用中可以从客户端接收多少数据的信息。您只需在WCF服务中的标记下添加此标记,它应该如下所示



此示例适用于2gb。

如何上载它们?使用正常的Ria服务?@graymete我希望我能告诉你,但我对WCF的东西还不熟悉,我真的不能说它是否是正常的Ria。你应该尝试使用类似这样的东西:。这将分块上传文件。如果您更喜欢使用WCF服务,请查看此帖子@Grayment中的消息大小限制。第一条评论是一个很好的应用程序,它工作得很好,但它没有提供任何代码来说明它是如何完成任务的,也没有上传到数据库,这是一项要求。此外,我必须在我的应用程序中内置这些东西,我不允许使用第三方的东西-公司不允许。第二条评论。。。我所有的阅读器配额和MaxReceivedMessageSize都设置为2147483647(2GB?),所以我认为这不应该是问题所在,我不认为它超时了。我将发送、接收和关闭超时设置为10分钟,但仍然存在问题。我认为,如果是超时问题,则需要一段时间才会出现错误,但错误“未找到”发生在我点击大于6MB的文件的上载按钮后的一秒钟。在6MB以下工作正常。必须有一个将文件大小保持在6MB的设置…我将在周一检查该设置,但我相当确定我已将其设置为类似的设置。我与OP有相同的症状,这为我解决了问题。谢谢
<bindings>
  <customBinding>
    <binding name="CustomBinding_HelloWorldService">
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
    </binding>
  </customBinding>
</bindings>
<binding name="CustomBinding_HelloWorldService" sendTimeout="00:10:00">