C# 在windows phone 8应用程序中调用REST web服务时,值不在预期范围内

C# 在windows phone 8应用程序中调用REST web服务时,值不在预期范围内,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我在这件事上挣扎了好几个小时。当我调用一个web服务函数时,我不断得到“值不在预期范围内”。我正在使用一个POST方法,向其中传递一个json对象,并希望返回一些json数据 这是没有意义的,因为我已经让其他web服务功能工作得非常好,最令人烦恼的是,当从Fiddler 2调用它时,它工作得非常好 我正在调用以下代码以进行尝试/捕获 string jsonResponse = await wc.UploadStringTaskAsync(new Uri(App.WebServiceUri + "

我在这件事上挣扎了好几个小时。当我调用一个web服务函数时,我不断得到“值不在预期范围内”。我正在使用一个POST方法,向其中传递一个json对象,并希望返回一些json数据

这是没有意义的,因为我已经让其他web服务功能工作得非常好,最令人烦恼的是,当从Fiddler 2调用它时,它工作得非常好

我正在调用以下代码以进行尝试/捕获

string jsonResponse = await wc.UploadStringTaskAsync(new Uri(App.WebServiceUri + "/json/getdocumentbydocid"), jsonRequest);
我在代码中加入了断点,当从fiddler调用时,它会进入特定函数,但当通过代码调用时,它会生成异常“值不在预期范围内”,但不会在try/catch中捕获

string jsonResponse = await wc.UploadStringTaskAsync(new Uri(App.WebServiceUri + "/json/getdocumentbydocid"), jsonRequest);
它直接爆炸到

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs 
(e)

可能try/catch没有捕捉到它,因为我是从异步函数调用它的:

public static Task<string> UploadStringTaskAsync(this WebClient wc, Uri url, string data)
{
    var tcs = new TaskCompletionSource<string>();

    wc.UploadStringCompleted += (s, e) =>
    {
        if (e.Error != null)
            tcs.TrySetException(e.Error);
        else if (e.Cancelled)
            tcs.TrySetCanceled();
        else
            tcs.TrySetResult(e.Result);
    };

    wc.UploadStringAsync(url, "POST", data);

    return tcs.Task;
}
此属性绑定到我的viewModel中的属性,即DocumentUri

public string DocumentUri
{
    get { return this._documentUri; }
    set
    {
        if (this._documentUri != value)
        {
            this.SetProperty(ref this._documentUri, value);
        }
    }
}
SetProperty负责INotifyPropertyChanged,我的事件处理程序肯定正在设置中

下面是我的xaml代码:

<Grid Grid.Row="1">
    <StackPanel Orientation="Vertical">
        <cc:Viewer SourceFile="{Binding DocumentUri}" />
    </StackPanel>                        
 </Grid>

其中cc:Viewer是我的用户控件

当设置为上述值时,我得到以下错误:“值不在预期范围内。”

如果删除SourceFile=“{Binding DocumentUri}”,错误将消失,但这是毫无意义的,因为我需要此属性在下载文档时显示文档。它只是确认它实际上与该地产有关联

有什么想法吗

谢谢


蒂埃里

我删除了我的原始答案,因为我刚刚发现了问题的原因,这次我100%确信这一点

虽然我认为这可能与狡猾的xaml有关,或者在从构造函数调用异步函数时没有延迟加载,但这是多种因素的组合

抛出的错误完全是误导!!这是多种因素共同作用的结果:

  • 在不使用异步初始化模式的情况下从构造函数调用异步
  • 不检查构造函数和属性中的值是否为空
  • 在我的UserControl中创建未绑定的属性。我刚刚创建了一个常规属性,而实际上我应该使用DepencyProperty创建一个属性以使其可绑定

  • 一旦上述所有操作都正确,我的问题就得到了解决。

    如果跟踪到应用程序中,是否还有关于异常的更多详细信息?UnhandledException.Source、StackTrace和InnerException均为null。唯一被填满的是信息。{System.ArgumentException:值不在预期范围内。}[System.ArgumentException]:{System.ArgumentException:值不在预期范围内。}数据:{System.Collections.ListDictionaryInternal}帮助链接:null HResult:-2147024809 InnerException:null消息:“值不在预期范围内。”源:null StackTrace:null@Thierry尝试Debug.WriteLine(“”)在UploadStringTaskAsync方法中,也可能该方法不应该是静态的???尝试使用非静态方法,看看它是否有效。@user2653208 UploadStringTaskAsync之所以是静态的,是因为它是一个扩展函数,但我将在明天对其进行测试和更新。谢谢。@Thierry您尝试过吗?是否有效?编辑:可能错误不是在函数中。当应用程序到达ApplicationUnhandledException方法中的断点时,是否检查了“局部变量”选项卡