2010-07-13 5 views
2

J'essaie de télécharger une réponse d'un serveur qui est au format Protocol Buffer à partir d'une application Windows Phone 7.Protocole de réseau tampon avec Windows Phone 7

J'essaye de faire ceci avec un WebClient, mon problème est le suivant.

Le WebClient n'a que deux méthode pour le téléchargement

DownloadStringAsync(new Uri(url)); 

et

OpenReadAsync(new Uri(url)); 

mais cette méthode deux ne sont pas bonnes pour récupérer la réponse parce que, la taille de la réponse devrait avoir 16 caracteres hexadécimaux (080118CBDDF0E104), mais la taille de la chaîne et le flux obtenir par les deux méthodes sont seulement 8.

Donc je cherche un moyen de résoudre mon problème. J'ai trouvé un pour C#

public static T DownloadProto<T>(this WebClient client, string address) 
{ 
    byte[] data = client.DownloadData(address); 
    using (var ms = new MemoryStream(data)) 
    { 
     return Serializer.Deserialize<T>(ms); 
    } 
} 

sur http://code.google.com/p/protobuf-net/source/browse/trunk/BasicHttp/HttpClient/ProtoWebClient.cs?spec=svn340&r=340

Mais cette méthode a été supprimé ou non encore mis en œuvre sur le Windows Phone 7 kit de développement.

+0

En effet; Je n'ai tout simplement pas eu le temps de regarder le côté socket/etc des choses pour "v2", et c'est v2 qui fonctionne sur le téléphone 7. Cependant, la vraie question ici est: quelles données descendent le fil? Si vous avez un exemple petit mais complet je peux jouer avec je pourrais bien l'utiliser pour aider à finir cette zone ... –

+0

Cependant; le problème principal ici * semble * être d'obtenir le fragment complet au client - cela ne devrait pas être lié au moteur de sérialisation réel ...? –

Répondre

0

Comment lisez-vous le flux?

Si vous lisez comme une chaîne, puis ses deux octets peut-être la lecture par caractère - utiliser à la place

var buf = new byte[16]; 
var actual = stream.Read(buf, 0, buf.Length);