0

我正在学习 WCF 并尝试从书中学到的不同示例。

我有一个简单的服务设置如下:

[ServiceContract]
interface MyService
{
    [OperationContract(IsOneWay = true)]
    void Throws();
}

我的客户端代码使用 ChannelFactory 类来创建代理:

var baseTcpAddress = new Uri("net.tcp://localhost/hello");

var tcpBinding = new NetTcpBinding();

// Create client channel.
ChannelFactory<ITestService> factory = new ChannelFactory<ITestService>(tcpBinding, new EndpointAddress(baseTcpAddress));
var channel = factory.CreateChannel();

var commObject = channel as ICommunicationObject;

commObject.Faulted += commObject_Faulted;
commObject.Closed += commObject_Closed;

调用此方法时,它会引发未处理的异常(不是从 FaultException 派生的),并且使用相同代理的后续调用会引发异常并且通道出现故障。

问题是我在代理通道的故障事件中注册,但我没有收到任何通知,只有在尝试访问代理时。

我的问题是——客户端如何保护自己免受故障代理的影响?代理不应该通知客户端它不可用,而不是让客户端尝试使用它吗?

4

1 回答 1

0

“问题”是方法是单向的。在某种程度上,这是一个“一劳永逸”的操作(将会话放在一边),如果它引发异常 - 客户端无法知道这一点。从客户端的角度来看,一旦在另一端收到请求(收到未处理 ,请求就成功了。

我建议你先用非一种方式尝试同样的方法。

另外,请发布您用于订阅故障事件的代码。您使用的是什么主机?你是如何创建代理的?(通道工厂?)

您可以尝试订阅 ServiceHost 的 Faulted 事件(如果有的话)并查看它是否会触发。

另外,您是否尝试过查询代理的状态?

另外,请在 SO 上参考这个问题,我相信您可能会在那里得到答案。

干杯

于 2012-08-14T18:07:45.970 回答