14

我已經給我的負載條件下這個錯誤的WCF服務(我似乎無法以其他方式重新創建錯誤)。我們一直在努力尋找辦法解決它大約一個星期現在沒有這樣的運氣..System.Net.WebException:請求已中止:請求已被取消

我看到有兩個部分,以它的錯誤,

System.ServiceModel.CommunicationException: An error: (The request was aborted: the request was cancelled.) occurred while transmitting data over the http channel.

和:

System.Net.WebException: The request was aborted: the request was cancelled.

我見過很多人建議禁用與合作,通過在Reference.cs文件超載的方法和設置KeepAlive = false永葆,然而,我們的客戶端使用服務引用(除Web引用),且該選項不存在了。

我已經看到了另一種選擇是添加自定義綁定到該服務,而不是我們現在所使用的BasicHttpBinding,但是這會打擾向後支持web服務的那些已經使用Web引用誰(因爲CustomBinding不SOAP啓用)。

有沒有人處理,在此之前的錯誤?有沒有辦法在WCF中禁用保持活動而不影響服務器端?是否還有其他任何已知會導致此錯誤的活着?

+0

您可以訪問HTTP上下文,做你想做的web.config中。看看這裏:http://blogs.msdn.com/b/justinjsmith/archive/2007/08/22/setting-http-headers-in-wcf-net-3-5.aspx – Aliostad 2010-10-10 12:11:47

回答

5

我不認爲HTTP保持活動負責這個。 WCF應該能夠自己處理這個問題,這樣HTTP請求就可以共享HTTP持久連接,如果它到期(在100s of inactivity之後到期),WCF將創建新的連接而不觸發任何異常。如果您的連接在請求傳輸期間中止,那麼我預計會有其他問題。

您可以使用等同於basicHttpBinding的這個自定義綁定沒有HTTP永葆:

<bindings> 
    <customBinding> 
    <binding name="NoKeepAlive"> 
     <textMessageEncoding messageVersion="Soap11" /> 
     <httpTransport keepAliveEnabled="false" /> 
    </binding> 
    </customBinding> 
</bindings> 
+2

是的,這是負責任的我之前也見過它。 – Aliostad 2010-10-10 12:08:01

+0

哇,我剛剛經歷過這個。真是一個驚喜。謝謝,@Aliostad – Alexandru 2017-04-20 14:18:28

+0

@Aliostad出於好奇,你還在調用基於Tomcat的Java Web服務嗎? – Alexandru 2017-04-20 14:20:29

1

我有此相同的問題。 在我的情況我是異步執行請求。我從客戶端向服務器發送了幾百個請求。我/正在使用basicHttpBinding。並在我的app.config設置openTimeout屬性設置爲60秒或一分鐘。一旦我將這個數字設置爲更大的數字,例如10分鐘,問題就消失了。

因此,例如,我改變了所有這些值在我的app.config文件:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:10:00" 
        openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" 

至10分鐘。

4

我要上傳大文件時有這個問題。我不得不把它添加到Web服務

<system.web> 
    <httpRuntime maxRequestLength="10240" /> 
相關問題