2012-03-22 49 views
1

我遇到了WCF服務的問題。它運行WebHTTP綁定,並且是一種接收圖像的服務。WCF服務在Windows Server 2003/IIS6上失敗 - 底層連接已關閉

的問題是,對某些圖像服務器未能接收傳入的數據流。問題不在於規模。它可以接收100Kb和4MB的文件,但在800kb的文件中失敗。 「缺陷」圖像永遠不會成功,「好」圖像將永遠成功。

我現在懷疑是在IIS 6,我們有它在測試和生產在房子上運行IIS 7和IIS 7.5,但在這個客戶現場與IIS 6失敗。

我無法弄清楚如何獲得更多的調試信息進行IIS 6的走近它爲什麼被切斷連接。

下面是討厭的細節,因爲我認爲相關。

我希望會有人一直在這裏,並且能夠向前協助我。

機器

的Windows 2003 R2 SP2 + IIS 6,+ NET 2.0 + 3.5

WCF

我已經改變的transferMode以緩衝對我的WCF服務,在我這樣做後,服務代碼甚至不會被調用。所以我不懷疑WCF設置。

我已經啓用meesageLogging爲WCF,這再次給我幾乎沒有。

<system.serviceModel> 
    <diagnostics> 
    <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="-1"/> 
    </diagnostics> 

在日誌文件記錄之後給了我下面的:

基本信息:

活動名稱:處理消息1.

時間:2012-03-22 09 :27:56.1996

級別:錯誤

來源:System.ServiceModel

過程:W3WP

螺紋:12

異常消息:

可用的字節數是與HTTP Content-Length頭不一致。可能有網絡錯誤或客戶端可能發送無效請求。

異常Stakctrace:

System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(流 的inputStream) 系統。ServiceModel.Channels.HttpInput.ParseIncomingMessage(例外& requestException) System.ServiceModel.Channels.HttpRequestContext.CreateMessage() System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext 上下文,ItemDequeuedCallback回調) System.ServiceModel.Activation。 HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult 結果) System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(對象 狀態) System.ServiceModel.PartialTrustHelpers.PartialTrustInvoke(ContextCallback 回調,對象狀態) System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequestWithFlow(對象 狀態) System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke2() 系統。 ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke() System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ProcessCallbacks() System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.CompletionCallback(對象 狀態) System.ServiceModel.Channels .IOThreadScheduler.CriticalHelper.ScheduledOverlapped.IOCallback(UInt32 errorCode,UInt32 numBytes,Native重疊* nativeOverlapped) System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32的 誤差,UInt32的bytesRead,NativeOverlapped * nativeOverlapped) System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32的 的errorCode,UInt32的的numBytes,NativeOverlapped * pOVERLAP)

同樣,證據表明它不是我們的WCF服務負責該錯誤,而是WCF管道中的某處。

HTTPERR

我已經檢查了IIS的日誌HTTPERR,並沒有什麼存在,但Timer_ConnectionIdle項,這應該是無關的。

提琴手

提琴手只是陳述了顯而易見的:

[提琴手] ReadResponse()失敗:服務器未返回該請求的響應。

如果有任何需要更多的信息讓我知道,我會提交它。

問候 /安德斯

回答

1

所以我有太多這個問題。起初我認爲這可能是一個線程問題(儘管這違背了我的判斷)。我讓我的服務調用線程安全,然後在我經過工作進程崩潰後回到真正的異常。對我來說,問題原來是因爲我正在使用模擬來寫入並閱讀具有特定憑證的分享。然而,這份份額無法獲得更多的聯繫。儘管我正在註銷(關閉手柄),但顯然連接仍在懸掛。我最終做的是使用MemoryCache將令牌保留一段時間,並在共享和用戶對我的數據庫中任何給定媒體都相同時重用它們。

我不確定你的問題是否是同一個問題,但我們確實有相同的症狀。我的WCF服務正在讀取和寫入共享。使用SafeThread類(我從這裏修改了代碼原始來源:http://www.codeproject.com/KB/threads/SafeThread.aspx)我能夠防止工作進程崩潰並看到我的真實錯誤被記錄下來。

知識庫文章。 http://support.microsoft.com/kb/179483

希望這可以幫助別人。

+0

注意:當WCF服務託管在Server 2008/IIS7框上時,我們也看到了這種行爲。 – adillon 2012-04-09 17:27:33

+0

嗨,我不相信這是什麼導致我們的錯誤。在嘗試將文件寫入網絡共享之前,我們會遇到錯誤。當我們將圖像傳輸到服務器時,它會在某些文件上失敗,並且只會上傳一部分文件。如上所述,啓用緩衝傳輸模式時,WCF服務甚至不會被調用。我們懷疑一些網絡元素,但尚未得到客戶的迴應。但他們聲稱已經解決了這個問題,我們現在還不知道。 – ankhansen 2012-04-10 07:44:54

相關問題