Monotouch:WCF服务和异常处理

时间:2011-03-30 13:11:58

标签: wcf exception-handling asynchronous mono xamarin.ios

我正在使用使用Visual Studio创建的WCF服务。

我正在为检索数据进行GetDataAsync(param)等调用。在GetDataCompleted处理程序中,我正在使用检索到的数据。

服务有效。有时我无法检索数据。在这种情况下,发生如下异常:

Exception in async operation: System.Net.ProtocolViolationException: The number of bytes to be written is greater than the specified ContentLength.
  at System.Net.WebConnectionStream.CheckWriteOverflow (Int64 contentLength, Int64 totalWritten, Int64 size) [0x00038] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebConnectionStream.cs:546 

怎样才能抓住类似的重复?应用程序仍在工作,但异常在控制台上打印。我认为异常来自Channel或其他。

提前谢谢。

3 个答案:

答案 0 :(得分:2)

你的问题是:

  

如何捕获类似的(red:ProtocolViolationException)异常?

在您的服务应用程序中,使用以下代码捕获ProtocolViolationException

catch (ProtocolViolationException ex)
{
  // do something with your exception here
  // for example, throw a FaultException that will be communicated to the client
  throw new FaultException<ProtocolViolationException> 
        (ex, new FaultReason(ex.Message), new FaultCode("Sender")); 
}

要正确发送回客户端,您需要在操作合同上设置其他属性,例如:

[OperationContract()] 
[FaultContract(typeof(ProtocolViolationException))] 

然后,在客户端,您可以预见到这个特定的异常并优雅地处理它,例如:

catch (FaultException<ProtocolViolationException> ex) 
{ 
    Console.WriteLine("FaultException<>: " + ex.Detail.GetType().Name + " - " + ex.Detail.Message); 
} 

这会回答你的问题吗?

答案 1 :(得分:2)

不幸的是,目前Monotouch无法捕获这些WCF异常。这似乎是一个已知的错误。见MonoTouch - WCF Services made by Silverlight tool - Can't catch exceptions

答案 2 :(得分:0)

使用WCF时,尽量获得尽可能多的可见性总是好的。我经常使用两种工具。它们是WCF跟踪查看器和WCF配置编辑器

  • SvcConfigEditor.exe
  • SvcTraceViewer.exe

根据您使用的是x64或x84机器以及.Net的版本,它们应该位于。

  • C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \
  • C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \
  • C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v6.0A \ Bin
  • C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin签出

查看http://merbla.blogspot.com/2009/02/wcf-tools.html