1

Сценарий: Windows Mobile C# Compact Framework 2.0 или 3.5 объект ProtobufОт Windows Mobile, как отправить C# объекта в поток HTTP

Мне нужно отправить объект в HTTP URL (Post). После этого я буду ждать ответа и получить измененную версию объекта назад. Любые входные данные о том, как подключиться к потоку http и передавать в сериализованном объекте?

ответ

2

Вы имеете в виду что-то подобное?

private string SendData(string method, string directory, string data) 
    { 
     string page = string.Format("http://{0}/{1}", DeviceAddress, directory); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(page); 
     request.KeepAlive = false; 
     request.ProtocolVersion = HttpVersion.Version10; 
     request.Method = method; 

     // turn our request string into a byte stream 
     byte[] postBytes; 

     if(data != null) 
     { 
      postBytes = Encoding.UTF8.GetBytes(data); 
     } 
     else 
     { 
      postBytes = new byte[0]; 
     } 

     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = postBytes.Length; 

     Stream requestStream = request.GetRequestStream(); 

     // now send it 
     requestStream.Write(postBytes, 0, postBytes.Length); 
     requestStream.Close(); 

     HttpWebResponse response; 

     response = (HttpWebResponse)request.GetResponse(); 

     return GetResponseData(response); 
    } 
+0

Спасибо, это отличное начало. Моя проблема теперь возникает по адресу: "postBytes = Encoding.UTF8.GetBytes (data);" и далее на Stream requestStream = request.GetRequestStream(); // теперь отправьте его requestStream.Write (postBytes, 0, postBytes.Length); requestStream.Close(); Ваш объект здесь, «данные», является строкой. Я пытаюсь отправить объект (мой собственный) класс EventInfo. Не могли бы вы прокомментировать, как вы переходите к Serialize и отправляете его вместо строки? –

+0

Я понятия не имею, как сериализовать ваш объект - только у вас будет protobuf. Я считаю, что механизм сериализации, бит essentailly вам нужно, чтобы eitehr получить его в XML и передать его здесь (вот как я его использую) или превратить его в массив байтов, а затем пропустить шаг Encoding.GetBytes(). – ctacke

+0

ОК. Благодарю. Я вижу, что теперь моя проблема больше связана с необходимостью сериализации объекта в потоке –