2011-03-16 82 views
0

我有一個WCF操作是這樣的,我怎樣才能知道當一個WCF操作被稱爲

public bool SubmitDocument(byte[] document) 

這樣的想法是,主叫方將連載的文件,並致電上述操作。然後它被放入我們的數據庫。

我想了解WCF的內部工作原理,所以當有人調用上面的操作時,在調用實際操作之前,需要將所有byte []數據發送到服務器似乎是合乎邏輯的。

當數據開始上傳到服務器時是否有'記錄'的方法,並且在部分失敗的情況下捕獲錯誤?我遇到了大約4mb的部分文檔發生故障的問題,而我的WCF服務甚至沒有註冊某人正在嘗試調用該操作。

我增加了上傳大小限制這樣,

<wsHttpBinding> 
    <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
    <binding name="CarWebserviceBinding" maxReceivedMessageSize="6291456"> 
     <security mode="None"> 
     </security> 
     <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
     <readerQuotas maxArrayLength="6291456" /> 
    </binding> 
    </wsHttpBinding> 

問題總體是一個第三方調用以上(SubmitDocument)的WCF操作和文件從來沒有它使我們的終端如果超過4MB。

+6

是。打開跟蹤。 – 2011-03-16 00:03:56

+0

順便說一句,WCF沒有網絡方法。它有操作。這是行業標準術語。 – 2011-03-16 00:27:21

+0

當然,好的,上面編輯過。 – peter 2011-03-16 01:14:01

回答

2

我發現這裏的答案,

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f6541134-2e08-4eb9-987b-2158fb99b403

所以有,我已經正確地處理類似這樣的各種WCF限制,

<wsHttpBinding> 
    <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
    <binding name="CarWebserviceBinding" maxReceivedMessageSize="6291456"> 
    <security mode="None"> 
    </security> 
    <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
    <readerQuotas maxArrayLength="6291456" /> 
    </binding> 
</wsHttpBinding> 

BUT我沒有做的是這樣的,

<system.web> 
    <httpRuntime maxRequestLength="16384" /> <!-- 16MB --> 
</system.web> 

對於任何進入的http請求,IIS都有大約4MB的默認限制。以上設置將覆蓋該限制。

另一件要提的是,我已將此添加到我的web.config打開跟蹤,

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> 
     <listeners> 
     <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\Traces.svclog" /> 
     </listeners> 
    </source> 
    </sources> 
</system.diagnostics> 

,並在錯誤日誌打開了錯誤,

CommunicationException - Maximum request length exceeded 
+0

你說當你添加'maxRequestLength'時,你停止了401錯誤,當你再次拿出時,你又會得到401錯誤? – 2011-03-17 22:20:44

+0

是的。那麼401的事情很難評論,因爲這些錯誤日誌來自不同的公司誰使用我們的WCF服務。即我看不到他們的代碼,從而理解爲什麼它失敗了。 – peter 2011-03-17 22:37:00

+0

但是我可以肯定的是,當一個人上傳一個大小爲4086kb的文檔到一個網站(這個網站稱爲我們的WCF服務)時,它永遠不會在沒有設置的情況下出現在我們的末尾,並且設置出現在我們的末尾別擔心。 – peter 2011-03-17 22:38:21

3

您超出了WCF消息的默認緩衝區大小。您可能需要了解TransferMode流式傳輸。有一個關於它的問題在這裏WCF HttpTransport: streamed vs buffered TransferMode

+0

我已經增加了限制,但我可能做得不正確。我更新了我的問題。 – peter 2011-03-16 00:08:36

+0

peter對不起,我對wsHttpBinding完全不熟悉。看起來像啓用跟蹤可能是您最好的下一步。 – 2011-03-16 00:16:11

+0

謝謝。我會去做。 – peter 2011-03-16 00:22:18

相關問題