2014-06-27 8 views
5

La presa Web è scritta in javascript dal mio collega. Sono riuscito a connettermi. Prima di tutto devo accedere all'applicazione utilizzando un account di prova. Devo inviare l'email e la password tramite un json. Ho installato il pacchetto Json.Net usando NuGet.Come inviare/ricevere messaggi tramite una presa Web su Windows Phone 8 utilizzando la classe ClientWebSocket?

Un codice che ho trovato sul mio reaserch è questo, ma non capisco come inviare i miei dati utilizzando quel segmento.

var buffer = new byte[1024]; 
var segment = new ArraySegment<byte>(buffer); 
webSocket.SendAsync(segment, WebSocketMessageType.Text, true, CancellationToken.None); 

Naturalmente, posso usare un oggetto

User user=new User(); 
user.Email="[email protected]"; 
user.Password="pass"; 
string json = JsonConvert.SerializeObject(user); 

Ma non sarà di alcuna utilità perché il metodo SendAsync accetta solo il tipo di byte sul segmento.

Tutto ciò che voglio è inviare tali dati, e se il login ha esito positivo, dovrei ricevere altri dati (in formato Json) sull'utente.

Come nota a margine, io sono abbastanza nuovo a prese web, ho usato i protocolli HTTP da ASP.NET WEB API 2.

risposta

11

Non ho idea su Windows Phone 8, ma dal codice è stato incollato sembra simile a .NET regolare ClientWebSocket, ecco avete alcuni esempi:

public static Task SendString(ClientWebSocket ws, String data, CancellationToken cancellation) 
{ 
    var encoded = Encoding.UTF8.GetBytes(data); 
    var buffer = new ArraySegment<Byte>(encoded, 0, encoded.Length); 
    return ws.SendAsync(buffer, WebSocketMessageType.Text, true, cancellation); 
} 

public static async Task<String> ReadString(ClientWebSocket ws) 
{ 
    ArraySegment<Byte> buffer = new ArraySegment<byte>(new Byte[8192]); 

    WebSocketReceiveResult result = null; 

    using (var ms = new MemoryStream()) 
    { 
     do 
     { 
      result = await ws.ReceiveAsync(buffer, CancellationToken.None); 
      ms.Write(buffer.Array, buffer.Offset, result.Count); 
     } 
     while (!result.EndOfMessage); 

     ms.Seek(0, SeekOrigin.Begin); 

     using (var reader = new StreamReader(ms, Encoding.UTF8)) 
      return reader.ReadToEnd(); 
    } 
} 

Se qualcosa non compila o esiste in WP8, basta trovare un equivalente.

+1

Grazie per la risposta! Nel frattempo ho capito (ho scritto webSockcetObject.Send (jsonObject) e questo è tutto). Ho provato a eliminare la domanda ... ma il davanzale appare sul sito, probabilmente l'applicazione web StackOverflow utilizza un'eliminazione software. Ad ogni modo la tua soluzione è corretta e voterei per rispondere ma non ho abbastanza reputazione. Il meglio che posso fare è approvarlo e dire grazie! :) –

Problemi correlati