WebRequest всегда попадает в NetworkError.WebRequestAlreadyFinished

1

У меня есть простой метод, который используется для вызова WebRequest, как показано в следующем коде. Обратный вызов всегда попадает на NetworkError.WebRequestAlreadyFinished. Как я могу исправить свой код, чтобы получить информацию из обратного вызова?

private async void stkWebRequestConnInfo_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        HttpWebRequest request = WebRequest.CreateHttp("http://bing.com");
        IAsyncResult result = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(response_Callback), request);
    }

    private void response_Callback(IAsyncResult asyncResult)
    {
        HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;

        NetworkInterfaceInfo netInterfaceInfo = null;
        try
        {
            netInterfaceInfo = request.GetCurrentNetworkInterface();
            request.EndGetResponse(asyncResult);
        }
        catch (NetworkException e)
        {
            // Calling GetCurrentNetworkInterface will throw a NetworkException if the WebRequest has already completed.
            // To make this call succeed, make a high latency web request call. 
            if (e.NetworkErrorCode == NetworkError.WebRequestAlreadyFinished)
            {
                DisplayMessage(AppResources.MainPage_Info_CannotCallWebRequest, AppResources.MainPage_Info_NetworkInterfaceInformation, MessageBoxButton.OK);
                return;
            }
            else if (e.NetworkErrorCode == NetworkError.NetworkSelectionRequirementFailed)
            {
                DisplayMessage(AppResources.MainPage_Info_ConnectionRequirementFailed, AppResources.MainPage_Info_NetworkInterfaceInformation, MessageBoxButton.OK);
            }
        }
        catch (WebException e)
        {
            DisplayMessage(AppResources.MainPage_Info_GeneralError, AppResources.MainPage_Info_WebRequestFailed, MessageBoxButton.OK);
        }

        // Use a StringBuilder to efficiently build up an information text about this
        // NetworkInterfaceInfo.
        StringBuilder sb = new StringBuilder();

        sb.Append(AppResources.MainPage_Info_Name + " ");
        sb.AppendLine(netInterfaceInfo.InterfaceName);

        sb.Append(AppResources.MainPage_Info_Type + " ");
        sb.AppendLine(GetInterfaceTypeString(netInterfaceInfo.InterfaceType));


        DisplayMessage(sb.ToString(), AppResources.MainPage_Info_NetworkInterfaceInformation, MessageBoxButton.OK);
    }

void DisplayMessage(string text, string caption, MessageBoxButton buttonConfiguration)
    {
        Dispatcher.BeginInvoke(() =>
        {
            MessageBox.Show(text, caption, buttonConfiguration);
        });
    }
Теги:
httpwebrequest
webrequest
httpwebresponse
windows-phone-8

1 ответ

0

GetCurrentNetworkInterface необходимо вызывать из потока пользовательского интерфейса. Поэтому заверните вызов Dispatcher.BeginInvoke();

  • 0
    Спасибо, я также ссылался на msdn.microsoft.com/en-US/library/windowsphone/develop/… но я возвращаю netInterfaceInfo как netInterfaceInfo при этом?
  • 0
    Не могли бы вы показать мне пример того, как правильно реализовать это, чтобы вызвать GetCurrentNetworkInterface и отобразить результат в MessageBox ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню