Nat*_*ate 5 .net c# debugging silverlight exception
我有一个Silverlight 3应用程序,它有95%的时间成功从WCF服务(在同一个webapp中)请求数据并显示它.
这种情况很少发生,通常是如果我快速点击服务很多次,但有时它会发生在一个单独的请求上.
每隔一段时间,如果我在短时间内请求大量交易,我会得到两个例外中的一个,它们都出现在Reference.cs文件中EndMyMethod(System.IAsyncResult result).
有几种方法,其中任何一种都有异常.第一个,是TimeoutException()我理解的,它是有意义的,第二个,我完全没有得到的是" CommunicationException()用户代码未处理:远程服务器返回错误:NotFound."
因为生成的文件中发生了异常,所以我将try..catch两个块都置于.MyMethodAsync()处理程序中并且MyMethodCompleted两者都无效Reference.cs.
任何帮助是极大的赞赏.
更新
Reference.cs - 由"添加服务参考"生成
public System.IAsyncResult BeginTogglePicked(string ID, string toggle, System.AsyncCallback callback, object asyncState)
{
object[] _args = new object[2];
_args[0] = ID;
_args[1] = toggle;
System.IAsyncResult _result = base.BeginInvoke("TogglePicked", _args, callback, asyncState);
return _result;
}
public void EndTogglePicked(System.IAsyncResult result)
{
object[] _args = new object[0];
// This is the line where the Exception is Thrown
base.EndInvoke("TogglePicked", _args, result);
}
Run Code Online (Sandbox Code Playgroud)
调用代码 - pickedIDs是一个字符串列表,userIDSelecting是一个在过程顶部定义的字符串.事件处理程序此时mdc_TogglePIckedCompleted为空.
MapDataClient mdc = new MyDataClient();
mdc.TogglePickedCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(mdc_TogglePickedCompleted);
foreach (string id in pickedIDs)
{
mdc.TogglePickedAsync(id, userIDSelecting, mdc);
}
Run Code Online (Sandbox Code Playgroud)
更新2
这是来自CommunicationException的"InnerException": System.Net.WebException: The remote server returned an error: NotFound.
不确定这是否有用,因为它没有提供任何额外的细节.正如我所说,这种情况在我每次调用服务方法时都不会发生.我还想指出同一个调用有时会工作,而不是其他调用,我开始认为这个问题是因为IIS无法响应我的服务调用,想法?
更新3
当我的意思是间接地说,我的意思是真实的内容.这可能仅在用户会话中发生一次,并且可能仅在五十个会话中的一个上发生.它不是一个全有或全无的作品.调用应用程序托管在与WCF服务相同的"webite"中,所以我不认为clintaccesspolicy.xml是问题,但我可能是错的.
您收到的消息可能是转移注意力的消息:-(
当引发内部 WCF 服务异常时,这些异常将始终在 Silverlight UI 中表现为“未找到服务器”异常。这是因为 HTTP 响应的类型为 500。我读到的关于此的最好的文章来自 David Betz - http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2(此是为 SL2 编写的,但概念仍然适用于 SL3。此外,他的一些方法是针对纯粹主义者的 - 例如“从不”使用 VS 的添加服务引用功能 - 您不必遵循他的所有建议;-) )
无论如何,回到你的问题,你需要将响应类型转换为 200 并解析消息中的异常。这可以使用 MessageInspector(在服务和 SL 应用程序中)来完成。
其中一些方法可能看起来相当令人畏惧 - 需要一些时间来理解这一点 - 这个概念对于WCF <--> SL应用程序至关重要,一旦你明白了它就有意义了:-)
自今年年初以来,我们已经使用此方法并取得了很大成功,因此如果您需要更多帮助,请告诉我。
| 归档时间: |
|
| 查看次数: |
7721 次 |
| 最近记录: |