我有一个Silverlight应用程序,它使用位于Web项目中的WCF服务。我在服务中有一个方法,以二进制格式将文件上传到数据库...这对于大约6MB的文件都可以正常工作,但当我超过该限制时,我收到错误“远程服务器返回错误:未找到。”哪个不告诉我太多。
我已启用跟踪和日志记录,但我没有收到任何错误/消息。我认为有一个上传/传输大小的设置,但我不知道它会在哪里。我已经搞乱了web.config中的某些设置而没有成功。
我如何超越此限制?
编辑:也许我应该首先发布我的代码,我已经设置了所有建议的尺寸(并且总是有)......
<bindings>
<basicHttpBinding>
<binding name="TaskCalendarService.BasicHttpBinding"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647"
transferMode="StreamedResponse">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TaskServiceBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<service name="TaskCalendarService"
behaviorConfiguration="TaskServiceBehavior">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="TaskCalendarService.BasicHttpBinding"
contract="Pars.Web.TaskCalendarService" />
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
正如您现在所看到的,我能想到的所有内容都已设置为足够大,以便能够处理超过6 MB,但我仍然会收到此错误。
编辑:错误
内部例外:
{System.Net.WebException:远程服务器返回错误:NotFound。 ---&GT;
System.Net.WebException:远程服务器返回错误:NotFound。“
&安培; vbCrLf&amp; “在System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)”
&安培; vbCrLf&amp; “在System.Net.Browser.BrowserHttpWebRequest。&lt;&gt; c_ DisplayClass5.b _4(Object sendState)”
&安培; vbCrLf&amp; “在System.Net.Browser.AsyncHelper。&lt;&gt; c_ DisplayClass4.b _1(Object sendState)”
&安培; vbCrLf&amp; “---内部异常堆栈跟踪结束---”&amp; vbCrLf&amp; “
在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state)“
&安培; vbCrLf&amp; “在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)”
&安培; vbCrLf&amp; “at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)}
在弹出错误窗口中,它还建议:
InnerException:检查异常的Response属性以确定请求失败的原因。 InnerException:检查异常的Status属性以确定请求失败的原因。
响应属性说:{System.NotImplementedException:此类未实现此属性。“&amp; vbCrLf&amp;”at System.Net.HttpWebResponse.get_Cookies()}
状态只是说:WebExceptionStatus.UnknownError(HttpStatusCode.NotFound)
堆栈追踪:
在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state) 在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
答案 0 :(得分:2)
如果超时,您可以更新自定义绑定。我假设你在Web.config中有这样的东西:
<bindings>
<customBinding>
<binding name="CustomBinding_HelloWorldService">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
如果是这样,您可以更新绑定(我只是将其设置为10分钟):
<binding name="CustomBinding_HelloWorldService" sendTimeout="00:10:00">
如果你想更多地研究一下:custombinding
答案 1 :(得分:2)
您的问题的解决方案很简单,因为它是默认值<httpRuntime maxRequestLength/>
,我认为是4mb,据我所知,它提供了WCF服务在一次调用中可以从客户端接收多少数据的信息。您只需在标签下的WCF服务中添加此标记,它应该如下所示
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2000000" />
</system.web>
此示例适用于2gb。