2011-11-01 56 views
2

我有一個Silverlight應用程序,它使用位於Web項目中的WCF服務。我有一個在服務中的方法,以二進制格式上傳文件到數據庫...這對所有大約6MB的文件都適用,但是當我超過這個限制時,我得到錯誤「遠程服務器返回一個錯誤:未找到。」這並沒有告訴我很多。使用Silverlight/WCF將大文件上傳到數據庫

我打開了跟蹤和日誌記錄,我沒有收到任何錯誤/消息。我認爲有一個上傳/傳輸大小的設置,但我不知道那會是什麼。我已經搞亂了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的內容,但我仍然遇到此錯誤。

EDIT:錯誤

內部異常:

{System.Net.WebException:遠程服務器返回錯誤:NOTFOUND。 ---> System.Net.WebException:遠程服務器返回錯誤:在System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult的asyncResult)NOTFOUND 「 & vbCrLf & 」「 & vbCrLf &」 在System.Net .Browser.BrowserHttpWebRequest。 <> c_ DisplayClass5.b _4(Object sendState)「 & vbCrLf &」at System.Net.Browser.AsyncHelper。 <> C_ DisplayClass4.b _1(對象sendState) 「 & vbCrLf & 」---內部異常堆棧跟蹤的結尾---「 & vbCrLf &」
在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,對象狀態) 「 & vbCrLf & 」在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult的asyncResult)「 & vbCrLf &」 在System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult的結果)}

在彈出的錯誤窗口中還暗示:

InnerException:檢查異常的Response屬性以確定請求失敗的原因。 InnerException:檢查異常的Status屬性以確定請求失敗的原因。

的響應特性說:{System.NotImplementedException:該屬性不被這個類實現 「& vbCrLf &」 在System.Net.HttpWebResponse.get_Cookies()}

的狀態只是說:WebExceptionStatus。 UnknownError(HttpStatusCode。NOTFOUND)

堆棧跟蹤:

在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,對象狀態) 在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult的asyncResult) 在System.ServiceModel .Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult的結果)

+0

你是如何上傳它們的?有正常的Ria服務嗎? – Graymatter

+0

@Graymatter我希望我可以告訴你,但我對這個WCF的東西是新的,我不能說真的是不是正常的RIA。 –

+0

你應該嘗試使用這樣的東西:http://slfileupload.codeplex.com/。這將以塊的形式上傳文件。 – Graymatter

回答

2

如果超時,您可以更新custombinding。我會認爲你必須在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

+0

我不認爲它是超時。我將發送,接收和關閉超時設置爲10分鐘,但仍然存在問題。我會認爲,如果是超時問題,需要一段時間纔會彈出錯誤,但是在大於6 MB的文件上點擊上傳按鈕後,錯誤「未找到」會發生一秒。在6 MB以下它工作得很好。必須有被保持文件大小爲6MB的地方設置... –

2

有關問題的解決方法很簡單,因爲它是由<httpRuntime maxRequestLength/>默認值由這是4MB我想,當我知道它提供的這些信息如何WCF服務可以在一次調用中從客戶端接收很多數據。你只需要在WCF服務添加標籤下的這個標籤,它應該是這樣的

<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime maxRequestLength="2000000" /> </system.web>

這個例子是2GB。

+0

我會檢查出來,設置在週一,但我相當肯定,我有它設置爲類似的東西。 –

+0

檢查它...已經有了這一套。 –

+0

我與OP有相同的症狀,這解決了我的問題。謝謝! – dreyln

相關問題