我正在使用使用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或其他。
提前谢谢。
答案 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配置编辑器
根据您使用的是x64或x84机器以及.Net的版本,它们应该位于。