Search code examples
c#webrequest

WebRequest vs FileWebRequest


I am going through the example exam questions for Microsoft exam 70-483 "Programming in C#".

There is one question the answer to which I don't understand and couldn't find anything about the topic on the Internet.

The question is:

You are implementing a method named ProcessFile that retrieves data files from web servers and FTP servers. The ProcessFile() method has the following method signature:
Public void ProcessFile(Guid dataField, string dataFileUri)
Each time the ProcessFile() method is called, it must retrieve a unique data file and then save the data file to disk.
You need to complete the implementation of the ProcessFile() method. Which code segment should you use?

FileWebRequest request = FileWebRequest.Create(dataFileUri) as FileWebRequest;
using (FileWebResponse response = request.GetResponse() as FileWebResponse)
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
using (StreamWriter writer = new StreamWriter(dataFieldId + ".dat"))
{
    writer.Write(reader.ReadToEnd());
}

-or-

WebRequest request = WebRequest.Create(dataFileUri);
using (WebResponse response = request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
using (StreamWriter writer = new StreamWriter(dataFieldId + ".dat"))
{
    writer.Write(reader.ReadToEnd());
}

According to the question-making people, the latter snippet, using "WebRequest" is the correct one. But I cannot figure out why the "FileWebRequest" one isn't.
Keep in mind the questions I am doing have been wrong a lot in the past, so maybe this isn't correct, either?


Solution

  • Some hours ago I also have met this question. Early I have not work with this, but by searching info in Google I concluded followings:

    • the main words in question is from web servers and FTP servers,

      that means that dataFileUri may be like http://mywebserver or ftp://myftpserver

    • when you try to get file from ftp server, for example:

      //from answer
      var request1 = WebRequest.Create("ftp://myftpserver");   
      
      //from answer
      var request2 = FileWebRequest.Create("ftp://myftpserver") as FileWebRequest;   
      
      var request3 = WebRequest.Create("ftp://myftpserver") as FtpWebRequest;
      

      request1, request3 will have request value with type SystemNet.FtpWebRequest. request2 will be null.

      The similar behavior will be when you try to use http://mywebserver: request2, request3 will be null.

    • when you use WebRequest the type of the request will be automatically detected by transfer protocol

      So you don't need to think about whether file stored on web server/file server/ftp server