2011-03-19 17 views
0

Helo。 我想擁有幾個全部共享所有cookie的webclient實例。這是因爲我想同時下載多個項目,並且需要始終登錄。WebCLient ShareCookies在客戶之間。 C#

這是我WebClientEx類:

using System; 
using System.Net; 

namespace Rapideo_Client 
{ 
    /// <summary> 
    /// A custom WebClient featuring a cookie container 
    /// </summary> 

    class WebClientEx : WebClient 
    { 
     public static CookieContainer CookieContainer { get; private set; } 

     public WebClientEx() 
     { 
      CookieContainer = new CookieContainer(); 
     } 

     protected override WebRequest GetWebRequest(Uri address) 
     { 
      var request = base.GetWebRequest(address); 
      if (request is HttpWebRequest) 
      { 
       (request as HttpWebRequest).CookieContainer = CookieContainer; 
      } 
      return request; 
     } 
    } 
} 

這是我得到異常的代碼部分:

 using (WebClientEx tempWebClient = new WebClientEx()) 
     { 
      siteTemp = tempWebClient.DownloadString("http://rapideo.pl/lista"); 
     } 

而這個例外是我得到這個代碼:

System.Net.WebException was unhandled by user code 
    Message=An exception occurred during a WebClient request. 
    Source=System 
    StackTrace: 
     at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) 
     at System.Net.WebClient.DownloadString(Uri address) 
     at System.Net.WebClient.DownloadString(String address) 
     at Rapideo_Client.Rapideo.ReadTransferMB() in e:\documents\visual studio 2010\Projects\Rapideo Client\Rapideo Client\Rapideo.cs:line 78 
     at Rapideo_Client.Rapideo.Refresh() in e:\documents\visual studio 2010\Projects\Rapideo Client\Rapideo Client\Rapideo.cs:line 50 
     at Rapideo_Client.MainWindow.RefreshTimer_Tick(Object sender, EventArgs e) in e:\documents\visual studio 2010\Projects\Rapideo Client\Rapideo Client\MainWindow.xaml.cs:line 74 
     at System.Timers.Timer.MyTimerCallback(Object state) 
    InnerException: System.IO.IOException 
     Message=Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. 
     Source=System 
     StackTrace: 
      at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
      at System.Net.WebClient.DownloadBitsState.RetrieveBytes(Int32& bytesRetrieved) 
      at System.Net.WebClient.DownloadBits(WebRequest request, Stream writeStream, CompletionDelegate completionDelegate, AsyncOperation asyncOp) 
      at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) 
     InnerException: System.Net.Sockets.SocketException 
      Message=An existing connection was forcibly closed by the remote host 
      Source=System 
      ErrorCode=10054 
      NativeErrorCode=10054 
      StackTrace: 
       at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) 
       at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
      InnerException: 

回答

0

我在我的WebCliet中添加了公共方法,它將參數中的Cookies複製到內部集合