Загрузите файлы с помощью HTTPWebrequest из приложения SilverLight (почему длина содержимого равна 13?) - PullRequest
2 голосов
/ 21 июня 2011

Друзья! Помогите мне, пожалуйста!

Я пытаюсь опубликовать файл из Silverlight. Я использую такой класс:

public class HttpHelper
    {
        public WebRequest Request { get; set; }
        public Stream Filestream { get; private set; }

        public HttpHelper(Stream filestream)
        {            
            Request = WebRequest.Create("http://www.mysite.com/recieve");                
            Request.Method = "POST";
            Request.ContentType = "application/octet-stream";
            Filestream = filestream;
        }

        private static void BeginFilePostRequest(IAsyncResult ar)
        {
            HttpHelper helper = ar.AsyncState as HttpHelper;
            if (helper != null)
            {
                byte[] bytes = new byte[helper.Filestream.Length];
                int sf = helper.Filestream.Read(bytes, 0, (int)helper.Filestream.Length);
                //helper.Request.ContentLength = bytes.Length; //It doesn't work in SL
                using (StreamWriter writer = new StreamWriter(helper.Request.EndGetRequestStream(ar)))
                {
                    writer.Write(bytes);
                }
                helper.Request.BeginGetResponse(new AsyncCallback(HttpHelper.BeginResponse), helper);
            }
        }

        private static void BeginResponse(IAsyncResult ar)
        {
            HttpHelper helper = ar.AsyncState as HttpHelper;
            if (helper != null)
            {
                HttpWebResponse response = (HttpWebResponse)helper.Request.EndGetResponse(ar);
                if (response != null)
                {
                    Stream stream = response.GetResponseStream();
                    if (stream != null)
                    {
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            //anything...
                        }
                    }
                }
            }
        }

        public void PostFile()
        {            
            this.Request.BeginGetRequestStream(new AsyncCallback(HttpHelper.BeginFilePostRequest), this);
        }
    }

У меня есть Stream в моем приложении silverlight, и я пытаюсь вызвать PostFile, нажав кнопку отправки:

private void submit_button_Click(object sender, RoutedEventArgs e)
        {           
            //...         
            HttpHelper helper = new HttpHelper(memory_stream);
            helper.PostFile();
        }

Но MySite получает запрос без файла. У него просто ContentLength 13. В чем проблема?

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

вам нужно очистить и утилизировать поток HTTP-запросов и все нисходящие потоки, тогда он работает.

0 голосов
/ 21 июня 2011

Попробуйте Flush на вашем устройстве записи перед выходом из блока using, вы также должны вызвать Close в потоке, полученном из EndGetRequestStream.

...