在windows phone 8应用程序中调用REST web服务时,值不在预期范围内
本文关键字:范围内 服务 web phone windows 应用程序 调用 REST | 更新日期: 2023-09-27 17:52:47
我已经纠结了几个小时了。当我调用我的一个web服务函数时,我一直得到"值不在预期范围内"。我正在使用一个POST方法,我正在传递一个json对象,并期望返回一些json数据。
它没有意义,因为我有其他web服务功能工作得很好,最烦人的是,当从Fiddler 2调用时,它工作得很好。
我在try/catch
中调用以下代码string jsonResponse = await wc.UploadStringTaskAsync(new Uri(App.WebServiceUri + "/json/getdocumentbydocid"), jsonRequest);
我已经把断点在我的代码中,当从fiddler调用时,它进入特定的函数,但当通过代码调用时,它会产生异常"值不落在预期范围内",但它不会在try/catch
中捕获它直接爆炸到
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs
e)
可能它没有被try/catch捕获,因为我是从async函数调用它的:
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;
}
但它仍然不能解释我的错误。我没有处理任何列表或类似的东西,所以我不得不再次假设它与uri相关,但这也不是!
当我在Application_UnhandledException中捕获错误并继续运行应用程序后,它实际上调用我的代码并返回适当的数据,但我的应用程序已经爆炸了。
这根本没有意义!json对象pass是一个简单的poco对象,它包含一个字符串(表名),一个长(docid)和一个int(页号),它返回一个poco对象,再次不包含列表或类似的,所以我不明白这个错误意味着什么,为什么它完美地工作在我的web服务中定义的所有其他函数。
任何想法?
谢谢。
更新:
这是我第二次修改这个答案!!我删除了我原来的那个,我以为我已经修好了,并提供了细节,但这不是正确的原因。
我受够了这个错误,但至少我在这个过程中学到了一些东西,但错误仍然没有意义,至少对我来说不是!
我认为这与狡猾的xaml有关,或者在从构造函数调用异步函数时没有延迟加载,但事实并非如此。
虽然我有可疑的代码,我很确定现在我已经清除了它,所有设置都如预期的那样,但我仍然得到错误。
我有一个需要在UserControl上的第三方控件。我的UserControl有一个单一的属性,即SourceFile类型的字符串
public string SourceFile
{
get
{
return _sourceFile;
}
set
{
_sourceFile = value;
}
}
这个属性被绑定到我的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是我的UserControl.
按上述设置时,我得到以下错误:"值不在预期范围内。"
如果我删除SourceFile="{Binding DocumentUri}",错误消失,但这是毫无意义的,因为我需要这个属性来显示我的文档,当它被下载。它只是确认它实际上链接到这个属性。
任何想法?
谢谢。
蒂埃里
我删除了原来的答案,因为我刚刚发现了导致问题的原因,这次我100%确定。
虽然我认为这可能与狡猾的xaml有关,或者在从构造函数调用异步函数时没有延迟加载,但这是多种因素的结合。
抛出的错误完全是误导!!这是由于多种原因造成的:
- 在不使用异步初始化模式的情况下从构造函数调用async。
- 不检查构造函数和属性中的值是否为空 在我的UserControl中创建一个没有绑定的属性。我只是创建了一个常规属性,而实际上我应该使用DepencyProperty创建一个属性,使其可绑定。
一旦以上都是正确的,我的问题就排序了。