J'ai un problème très particulier avec un programme que je développe pour WP7. En premier lieu, je développe une application de devis en streaming qui utilise HttpWebRequest/Response de manière asynchrone. Je surveille aussi tout ça dans Fiddler pour m'assurer que tout va bien.Problèmes de streaming HTTP avec WP7 (Windows Phone 7) et Fiddler
Les guillemets arrivent via une connexion Http toujours ouverte au serveur. La connexion fonctionne correctement, ainsi que la soumission de la demande d'abonnement. Le problème est que je ne rentrerai une réponse (il ne fait jamais à EndGetResponse) à moins que je ne l'une des deux choses:
1- Relancez la demande de souscription ouverte par Fiddler 2- Déposer une demande identique par RequestBuilder
FiddlerJ'ai essayé d'exécuter cette application sur le simulateur sur mon ordinateur portable, mais l'application n'a pas fonctionné, j'ai reçu une exception de protocole, mais c'est une question pour un fil différent.
Des idées? Je pense que cela a à voir avec le streaming de données via Fiddler. J'ai essayé de désinstaller Fiddler, désactiver la capture, annuler le paramètre de proxy dans WinInet mais rien n'a fonctionné. Cela me rend fou, alors votre aide serait grandement appréciée.
Mise à jour: J'ai été en mesure de recréer ceci avec l'API de streaming de Twitter. Voici le nouveau code. Il suffit de changer les informations d'identification de votre propre espace réservé par:
MainPage.xaml:
<phoneNavigation:PhoneApplicationPage
x:Class="TestHttpStreaming.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phoneNavigation="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Navigation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}">
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitleGrid is the name of the application and page title-->
<Grid x:Name="TitleGrid" Grid.Row="0">
<TextBlock Text="MY APPLICATION" x:Name="textBlockPageTitle" Style="{StaticResource PhoneTextPageTitle1Style}"/>
<TextBlock Text="page title" x:Name="textBlockListTitle" Style="{StaticResource PhoneTextPageTitle2Style}"/>
</Grid>
<!--ContentGrid is empty. Place new content here-->
<Grid x:Name="ContentGrid" Grid.Row="1">
<Button Content="Test" Height="70" HorizontalAlignment="Left" Margin="163,149,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
</Grid>
</Grid>
</phoneNavigation:PhoneApplicationPage>
MainPage.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.IO;
namespace TestHttpStreaming
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
}
Uri uri = null;
HttpWebRequest request = null;
byte[] buffer = new byte[1024];
Stream stream = null;
private void button1_Click(object sender, RoutedEventArgs e)
{
uri = new Uri("http://stream.twitter.com/1/statuses/sample.json?delimited=length", UriKind.Absolute);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.Credentials = new NetworkCredential("[username]", "[password]");
request.BeginGetResponse(new AsyncCallback(this.EndGetResponseStream), null);
}
void EndGetResponseStream(IAsyncResult result)
{
try
{
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
stream = response.GetResponseStream();
IAsyncResult iarRead = stream.BeginRead(buffer, 0, 1024, new AsyncCallback(StreamingReadCallBack), null);
}
finally
{
}
}
private void StreamingReadCallBack(IAsyncResult asyncResult)
{
int read = stream.EndRead(asyncResult);
}
}
}
J'ai fait # 1, mais où puis-je trouver l'option "Activer les réponses automatiques"? – TheOsiris
Je viens de le trouver, il est désactivé par défaut et je ne l'ai jamais changé. – TheOsiris
Êtes-vous toujours aux prises avec le problème? –