2014-06-27 14 views
5

Ổ cắm web được viết bằng javascript bởi đồng nghiệp của tôi. Tôi đã quản lý để kết nối. Trước hết tôi phải đăng nhập vào ứng dụng bằng tài khoản thử nghiệm. Tôi phải gửi email và mật khẩu thông qua một json. Tôi đã cài đặt gói Json.Net bằng NuGet.Làm thế nào để gửi/nhận tin nhắn thông qua một ổ cắm web trên windows phone 8 bằng cách sử dụng lớp ClientWebSocket?

Một số mã mà tôi tìm thấy trên phiếu nhắn tin của tôi là điều này, nhưng tôi không hiểu cách gửi dữ liệu của tôi bằng cách sử dụng phân đoạn đó.

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

Tất nhiên, tôi có thể sử dụng một đối tượng

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

Nhưng nó sẽ không được sử dụng bất kỳ vì phương pháp SendAsync chỉ chấp nhận kiểu byte trên phân khúc.

Tất cả những gì tôi muốn là gửi dữ liệu đó và nếu đăng nhập thành công, tôi sẽ nhận được dữ liệu khác (ở định dạng Json) về người dùng.

Là một mặt lưu ý, tôi khá mới để cổng web, tôi đã sử dụng các giao thức http từ ASP.NET WEB API 2.

Trả lời

11

Tôi không có ý tưởng về Windows Phone 8, nhưng bởi mã bạn dán nó có vẻ tương tự như .NET thường xuyên ClientWebSocket, vì vậy ở đây bạn có một số ví dụ:

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(); 
    } 
} 

Nếu có gì không biên dịch hoặc tồn tại trong WP8, chỉ cần tìm một tương đương.

+1

Cảm ơn bạn đã trả lời! Trong khi đó tôi đã tìm ra (tôi đã viết webSockcetObject.Send (jsonObject) và đó là tất cả). Tôi đã cố gắng để xóa các câu hỏi ... nhưng nó sill xuất hiện trên trang web, có lẽ stackoverflow webapplication sử dụng một xóa mềm. Dù sao giải pháp của bạn là chính xác, và tôi sẽ bỏ phiếu cho bạn trả lời nhưng tôi không có đủ danh tiếng. Điều tốt nhất tôi có thể làm là chấp thuận và nói lời cảm ơn! :) –

Các vấn đề liên quan