WCF 代理仅在使用时出现故障
Posted
技术标签:
【中文标题】WCF 代理仅在使用时出现故障【英文标题】:WCF proxy gets faulted only on usage 【发布时间】:2012-08-11 01:47:27 【问题描述】:我正在学习 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 事件中注册,但我没有收到任何通知,仅在尝试访问代理时。 p>
我的问题是——客户端如何保护自己免受故障代理的影响?代理不应该通知客户端它不可用,而不是让客户端尝试使用它吗?
【问题讨论】:
【参考方案1】:“问题”是方法是单向的。在某种程度上,这是一个“一劳永逸”(将会话放在一边)操作,如果它引发异常 - 客户端无法知道这一点。从客户端的角度来看,只要对方收到请求就成功了(received not processed)。
我建议你先用非一种方式尝试同样的方法。
另外,请发布您用于订阅故障事件的代码。您使用的是什么主机?你是如何创建代理的? (ChannelFactory?)
您可以尝试订阅 ServiceHost 的 Faulted 事件(如果有的话)并查看它是否会触发。
另外,您是否尝试查询代理的状态?
另外,请参考 SO 上的this question,相信您可以在那里得到答案。
干杯
【讨论】:
更新了我如何设置客户端 + 事件挂钩的问题。我也试过查询代理的状态,它总是返回 Opened。 看起来不错。您是否尝试订阅 ServiceHost.Faulted?另外,您是否尝试过单向?以上是关于WCF 代理仅在使用时出现故障的主要内容,如果未能解决你的问题,请参考以下文章
AWS 环境中的 WCF UserNameTransport 错误 - 收到不安全或不正确安全的故障