HttpWebRequest возвращает «Удаленный сервер возвратил ошибку: NotFound» на Windows Phone 7 - PullRequest
6 голосов
/ 30 января 2011

Я пытаюсь пройти аутентификацию на Huddle API с помощью эмулятора Windows Phone 7.Однако я не добиваюсь успеха.Я продолжаю получать "Удаленный сервер возвратил ошибку: NotFound".Я даже пытался «замять» мой код и просто пробовать прямой веб-сайт, например.Google, но все равно получаю тот же результат.

У меня есть следующий код:

string url = "http://www.google.com"; 

 HttpWebRequest client= WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest;

 client.AllowReadStreamBuffering = true;

 // Call and handle the response.
 client.BeginGetResponse(
  (asResult) =>
  {
   Dispatcher.BeginInvoke(
    () =>
    {
     try
     {
      var response = client.EndGetResponse(asResult);
      System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream());
      string responseString = reader.ReadToEnd();

     }
     catch (WebException failure)
     {
      throw failure;
     }
    });
  },
   null
 );

Выполнение всегда заканчивается в секции catch.Однако, посмотрев Fiddler2, похоже, что на google.com вообще нет трафика.Таким образом, запрос, кажется, не выполняется.

Я видел подобную проблему здесь Извлечение XML из https с помощью WebClient / HttpWebRequest - WP7 , но я использую стандартный порттак что не уверен, что это актуально.Я также попытался упростить код в соответствии с постом, но безуспешно.

Интересно, что наиболее вероятный вариант, вероятно, заключается в том, что в моем файле AppManifestWM.xaml, согласно , могут не быть определены сетевые возможностиHttpWebRequest Breaks на WP7 , но мой файл AppManifestWM.xaml, похоже, имеет такое определение:

<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0">
  <App xmlns="" ProductID="{ac5b5d62-573c-4134-b290-0ad4f678ad7f}" Title="xxx.WindowsPhone7.Client" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal"  Author="xxx.WindowsPhone7.Client author" Description="Sample description" Publisher="xxx.WindowsPhone7.Client publisher">
    <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>
    <Capabilities>
      <Capability Name="ID_CAP_NETWORKING" />
      <Capability Name="ID_CAP_LOCATION" />
      <Capability Name="ID_CAP_SENSORS" />
      <Capability Name="ID_CAP_MICROPHONE" />
      <Capability Name="ID_CAP_MEDIALIB" />
      <Capability Name="ID_CAP_GAMERSERVICES" />
      <Capability Name="ID_CAP_PHONEDIALER" />
      <Capability Name="ID_CAP_PUSH_NOTIFICATION" />
      <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
    </Capabilities>
    <Tasks>
      <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>
    </Tasks>
    <Tokens>
      <PrimaryToken TokenID="xxx.WindowsPhone7.ClientToken" TaskName="_default">
        <TemplateType5>
          <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
          <Count>0</Count>
          <Title>xxx.WindowsPhone7.Client</Title>
        </TemplateType5>
      </PrimaryToken>
    </Tokens>
  </App>
</Deployment>

Так что я в растерянности.Похоже, что запрос на самом деле не выполняется, что наводит меня на мысль, что что-то мешает этому.

Обновление:

Ничего не изменилось, но думал, что эта трассировка стека может heko:

Исключение System.Net.WebException было обработано Message = Theудаленный сервер вернул ошибку: NotFound.StackTrace: в System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) в System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult.() в System.Reflection.RuntimeMethodInfo.InternalInvoke (RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, связыватель связывателя, параметры объекта, культура CultureInfo, логическое значение isBinderDefault, вызывающая сборка, логическая проверка verifyAccess, StackCrawlMarkInfoTimeTimeMefRoMMEfoMefRoMMEfoMefRoMMMEfoMefRoMMfofoMTM)Объект obj, BindingFlags invokeAttr, связыватель Binder, параметры Object [], культура CultureInfo, StackCrawlMark & ​​stackMark) в System.Reflection.MethodBase.Invoke (параметры Object obj, Object []) в System.Delegate.DynamicInvokeOne (Object [] args) вSystem.MulticastDelegate.DynamicInvokeImpl (Object [] args) в System.Delegate.DynamicInvoke (Object [] args) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.Dispatch (приоритет DispatcherPriority) в System.Windows.Threading.Dispatcher.OnInvoke (контекст объекта) в System.Windows.Hosting.CallbackCookie.Invoke (аргументы Object []) в System..Windows.Hosting.DelegateWrapper.InternalInvoke (Object [] args) в System.Windows.RuntimeHost.ManagedHost.InvokeDelegate (IntPtr pHandle, Int32 nParamCount, ScriptParam [] pParams, ScriptParam * * pResult 1029) 1028 * 10 System.Net.WebExceptionStatus.UnknownError

Спасибо за ваше время.

Ответы [ 6 ]

6 голосов
/ 20 октября 2012

Никогда не использовал Fiddler2 , но имел точно такую ​​же проблему при разработке приложения Windows Phone .

Для меня причина была совсем другая: WMAppManifest.xml просто отсутствовал ID_CAP_NETWORKING!

Поскольку я получил исключение «не найдено» и не «не поддерживается исключение», я пробовал почти все остальное, пока не нашел настоящую причинупроблемы ...; -)

Я предпочитаю отключать все CAPS и включать только те, которые действительно нужны приложению, так как пользователи не поймут / не примут, если приложению нужен доступ ко "всему"; -)

3 голосов
/ 24 февраля 2012

Я работал несколько часов с теми же симптомами, что и оригинальный плакат. Затем я закрыл Fiddler2, как предложено выше. И тогда это работает. Не более "Удаленный сервер вернулся и ошибка: NotFound."

Magic! Спасибо, Келлиб. Должен был проголосовать, но мне не хватает кредита.

2 голосов
/ 28 февраля 2012

Выключение Fiddler2 решило мою проблему.

2 голосов
/ 14 февраля 2012

У вас работает Fiddler? Я получаю эту ошибку несколько раз, когда Fiddler подключен к моему сетевому стеку. С выключенным Fiddler проблем нет.

Мне было бы интересно услышать причину этого, если кто-то знает ...

Приветствия

1 голос
/ 30 января 2011

Хорошо, я решил это ... но не знаю как.Моя машина не была перезагружена, мой код не изменился.Единственное возможное объяснение - мой эмулятор несколько раз падал.Возможно, что-то там есть.

Спасибо за ваше время, я использую этот код, который хорошо работает с Huddle API:

                string url = "https://api.huddle.net/v1/xml/workspaces"; ; 

                HttpWebRequest client= WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest;

                client.Credentials = new NetworkCredential(ViewModel.UserAccount.UserName, ViewModel.UserAccount.Password); 
                client.AllowReadStreamBuffering = true;

                // Call and handle the response.
                client.BeginGetResponse(
                    (asResult) =>
                    {
                        Dispatcher.BeginInvoke(
                            () =>
                            {
                                try
                                {
                                    var response = client.EndGetResponse(asResult);
                                    System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream());
                                    string responseString = reader.ReadToEnd();



                                                                        }
                                catch (WebException failure)
                                {
                                    MessageBox.Show(failure.Message, "Cannot authenticate", MessageBoxButton.OK);
#if DEBUG
                                    throw failure;
#endif
                                }
                            });
                    },
                        null
                );
0 голосов
/ 30 января 2011

Это может быть просто вопросом разрешения вашего сетевого подключения.

Можно ли получить доступ к сети через IE и элемент управления WebBrowser внутри приложения?

Возможно, у вас есть прокси. Посмотрите, поможет ли этот документ в этом отношении.

Поддержка прокси для эмулятора Windows Phone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...