WCF异常会对应用程序性能产生极大影响

时间:2017-12-06 13:09:13

标签: c# wcf xamarin.forms uwp .net-standard

我在.NET Standard 1.4上有一个Xamarin.Forms应用程序,它使用WCF与位于本地网络中的服务进行通信。由于有一些非常长的运行操作,我必须实现非常高的超时(600秒)。如果服务不可用,应用程序现在将在那里停留600秒并且什么都不做,只是为了告诉用户该服务不可用。所以我实现了一个ping合约,它每5秒调用一次函数ping,所以我知道服务器是可用的,这是向用户显示的(根据用户的要求)。

在Android上这很好。如果服务器可用,则一切运行顺利,如果服务器由于某种原因脱机,则会引发异常,捕获并通知用户服务器处于脱机状态。

另一方面,在UWP上,在我能够捕获它之前,异常似乎被捕获并通过WCF实现的所有层调试输出重新抛出一百次。在我的Lumia 930上,这需要长达9秒的时间,即使在一个单独的任务中执行整个ping操作时,也会严重影响设备。在发布模式下,这种情况不那么极端,但大多数时候仍会冻结用户界面。我怎样才能解决这个问题?

编辑:
这是每次执行ping时逐行打印,而不是一个块,但服务不可用。我自己也不打印任何东西。

Active Browser Session

EDIT2:
我现在更新了项目中的每个NuGet包(主要是Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.IO.FileLoadException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.ServiceModel.dll Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.OperationCanceledException' in System.Net.Http.dll Exception thrown: 'System.OperationCanceledException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.TimeoutException' in System.Private.ServiceModel.dll Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.TimeoutException' in System.Private.ServiceModel.dll Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.Reflection.TargetInvocationException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.TimeoutException' in System.Reflection.DispatchProxy.dll Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll Exception thrown: 'System.TimeoutException' in System.Private.CoreLib.ni.dll System.NetSystem.ServiceModel包),它有点好转。无论服务状态如何,它都会抛出异常。现在它只在服务不可用时抛出异常,并且异常更少:

Microsoft.NETCore.UniversalWindowsPlatform

但异常仍会冻结GUI或此时发生的任何其他任务。

1 个答案:

答案 0 :(得分:0)

我和您有相同的问题,并从此post获得了答案。可能会对您有所帮助。

“您所看到的基本上是Visual Studio调试器功能-VS注意到应用程序中引发的任何异常都是“优先机会异常”。 参见https://blogs.msdn.microsoft.com/visualstudioalm/2015/01/07/understanding-exceptions-while-debugging-with-visual-studio/。 在没有VS的情况下独立运行该应用程序时,您不会看到这些消息的打印。

更多详细信息:这些异常实际上是作为https://github.com/grpc/grpc/pull/11021/files的一部分抛出在代码中的,但是可以预期并正确地处理它们。它们实际上只是打印出来的VS功能。”