title: How to properly pass stream through rest service to retrieve its length
body: <p>I'm passing the stream this way:</p>
  
  <pre><code>StreamReader sr = new StreamReader(openFileDialog1.FileName);
  byte[] fileStream = Utility.ReadFully(sr.BaseStream);
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
  request.Method = "POST";
  request.ContentType = "application/octet-stream";
  
  Stream serverStream = request.GetRequestStream();
  serverStream.Write(fileStream, 0, fileStream.Length);
  serverStream.Close();
  
  HttpWebResponse response2 = (HttpWebResponse)request.GetResponse();
  if (response2.StatusCode == HttpStatusCode.OK)
  {
      MessageBox.Show(Utility.ReadResponse(response2));
  }  
  </code></pre>
  
  <p><strong>-------------------------------------------------------------------------</strong></p>
  
  <pre><code>public static byte[] ReadFully(Stream input)
  {
      byte[] buffer = new byte[16 * 1024];
      using (MemoryStream ms = new MemoryStream())
      {
          if (input != null)
          {
              int read;
              while ((read = input.Read(buffer, 0, buffer.Length)) &gt; 0)
              {
                  ms.Write(buffer, 0, read);
              }
          }
          return ms.ToArray();
      }
  }  
  </code></pre>
  
  <p>Then handling it on the server:  </p>
  
  <pre><code>public bool UploadPhotoStream(string someStringParam, Stream fileData)
  {
      string filePath = string.Format("{0}/{1}", 'sdfgsdf87s7df8sd', '24asd54s4454d5f4g');
  
      ProductPhoto newphoto = new ProductPhoto();
      newphoto.FileSizeBytes = fileData.Length / 1024 / 1024;
      newphoto.FileLocation = filePath;
  
      ...
  }  
  </code></pre>
  
  <p>Now I'm getting <code>NotSupportedException</code> when calling <code>fileData.Length</code>. I know it happens because the stream is closed. But how can I re-open it? Or what should I do so that when I pass the stream to the service I can still get its length?</p>