WCF代理仅在使用时出现故障

时间:2012-08-14 17:49:28

标签: c# .net wcf proxy wcf-client

我正在学习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派生的),并且使用同一代理的后续调用会引发异常,并且通道会出现故障。

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

我的问题是 - 客户如何保护自己免受错误代理的侵害?不应该代理通知客户端它不可用而不是让客户端尝试使用它吗?

1 个答案:

答案 0 :(得分:0)

“问题”是该方法是单向的。在某种程度上,这是一个火与忘记(把会话放在一边)操作,如果它抛出异常 - 客户无法知道这一点。从客户的角度来看,一旦收到请求就会成功(收到 )。

我建议你先用非单向试试。

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

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

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

此外,请参阅this question,我相信您可以在那里得到答案。

干杯