为什么我在服务器端 try 不到客户端回调所 throw 的异常,使用的binding是 netTcpBinding 代码如下:
1.契约
[ServiceContract(CallbackContract = typeof(IDuplexCallback))]
public interface IDuplex
{
[OperationContract]
void DoWork();
}public interface IDuplexCallback
{
[FaultContract(typeof(ArgumentNullException))]
[OperationContract]
void DoCallback();
}2.服务
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class Duplex : Contracts.IDuplex
{
public void DoWork()
{
Debug.WriteLine("DoWork"); var callback = OperationContext.Current.GetCallbackChannel<Contracts.IDuplexCallback>();
if (callback != null)
{
try
{
callback.DoCallback();
}
catch (FaultException<ArgumentNullException> ex)
{
Debug.WriteLine(ex.Detail.Message);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
}
}
3.客户端回调实现
public class DuplexCallback : Duplex.IDuplexCallback
{
public void DoCallback()
{
Debug.WriteLine("DoCallback"); throw new FaultException<ArgumentNullException>(new ArgumentNullException("sdfsdf"));
}
}
4.客户端调用
var callback = new DuplexCallback();
var instanceContext = new InstanceContext(callback);
var proxyObj = new Duplex.DuplexClient(instanceContext);
proxyObj.DoWork();
Console.ReadKey();
1.契约
[ServiceContract(CallbackContract = typeof(IDuplexCallback))]
public interface IDuplex
{
[OperationContract]
void DoWork();
}public interface IDuplexCallback
{
[FaultContract(typeof(ArgumentNullException))]
[OperationContract]
void DoCallback();
}2.服务
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class Duplex : Contracts.IDuplex
{
public void DoWork()
{
Debug.WriteLine("DoWork"); var callback = OperationContext.Current.GetCallbackChannel<Contracts.IDuplexCallback>();
if (callback != null)
{
try
{
callback.DoCallback();
}
catch (FaultException<ArgumentNullException> ex)
{
Debug.WriteLine(ex.Detail.Message);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
}
}
3.客户端回调实现
public class DuplexCallback : Duplex.IDuplexCallback
{
public void DoCallback()
{
Debug.WriteLine("DoCallback"); throw new FaultException<ArgumentNullException>(new ArgumentNullException("sdfsdf"));
}
}
4.客户端调用
var callback = new DuplexCallback();
var instanceContext = new InstanceContext(callback);
var proxyObj = new Duplex.DuplexClient(instanceContext);
proxyObj.DoWork();
Console.ReadKey();
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货