Async requests to a web service

前端 未结 2 343
抹茶落季
抹茶落季 2020-12-22 10:37

How to make async requests to a webservice from a Thread?

相关标签:
2条回答
  • 2020-12-22 11:21

    Here is the short answer without a load of explanations.

    Before calling the Async method on your Client object make sure you are not running on the UI Thread:-

    System.Threading.ThreadPool.QueueUserWorkItem( o =>
    {
       try
       {
          svc.SomeMethodAsync();
       }
       catch (err)
       {
           // do something sensible with err
       }
    });
    

    Now the corresponding completed event will occur on a ThreadPool thread not the UI Thread.

    0 讨论(0)
  • 2020-12-22 11:39

    Here is a solution using WCF.

    Service Code FileService.svc

    public class FileService
    {
        [OperationContract]
        public byte[] GetFile(string filename)
        {
            byte[] File;
            //do logic
    
            return File;
        }
    }
    

    Client Code

    public int requested_file_count = 5;
    public list<string> filenames;
    
    public FileServiceClient svc 
    
    //Constructor
    public Example()
    {
       svc = new FileServiceClient();
    } 
    
    Public void GetFiles()
    {
        //Initialise the list of names and set the count of files received     
        filenames = new list<string>(5);
        requested_file_count = filenames.Count; 
    
       svc.GetFileCompleted += new EventHandler<GetFileCompletedEventArgs>(GetFile_Completed);
    
       //Call the Async Method passing it the file name and setting the userstate to 1;
    
       svc.GetFileAsync(filenames[0],1);
    }
    
    void GetFile_Completed(object Sender, GetFileCompletedEventArgs e)
    {
       if (e.UserState == requested_file_count)
       {
         //All files have been downloaded
       }
       else
       {
          svc.GetFileAsync(filenames[e.UserState],++e.UserState);
       }
    
       //Do Something with the downloaded file
       byte[] filedata = e.result;
    }
    
    0 讨论(0)
提交回复
热议问题