【发布时间】:2010-12-17 20:04:14
【问题描述】:
如果我像这样article from msdn 使我的异常可序列化,那么我的异常可以通过 WCF 序列化吗?
【问题讨论】:
标签: wcf exception serialization exception-handling serializable
如果我像这样article from msdn 使我的异常可序列化,那么我的异常可以通过 WCF 序列化吗?
【问题讨论】:
标签: wcf exception serialization exception-handling serializable
是的,您可以序列化异常并使用 WCF 返回它们。我编写了一个应用程序,其中 WCF 客户端需要在服务器上发生真正的异常;不仅仅是高级故障。
以下是实施我们所做工作的步骤:
1 - 使用单个字符串属性声明一个类 EncodedException
public class EncodedException
{
public string SerializedException {get;set;}
}
2 - 在您的服务合同中添加属性以表明您的服务可以返回 FaultException 异常。
[ServiceContract()]
public class MyService
{
[OperationContract]
[FaultContract(typeof(EncodedException),
ProtectionLevel = ProtectionLevel.EncryptAndSign)]
public string Method1 ();
}
3 - 在您的服务实现中,在所有服务操作中添加 try/catch:
public void Method1()
{
try
{
// some code here
}
catch( Exception ex)
{
EncodedException encodedException = Helper.SerializeException( ex );
throw new FaulException<EncodedException>();
}
}
4 - 在您的客户端代码中捕获异常并将其解包:
public void someMethod()
{
try
{
serviceClient.Method1();
}
catch( FaulException<EncodedException> ex)
{
Exception decodedException = Helper.DeserializeException( ex );
throw new decodedException();
}
}
5 - 编写帮助程序来序列化/反序列化异常。如果你也需要这部分的帮助,请告诉我。
我希望这会有所帮助。
【讨论】:
我不明白为什么不这样做,如果您成功创建了一个可以通过经典 asmx 序列化的对象,那么在 WCF 中就可以了。
【讨论】: