我有一个实现“自定义用户名密码验证器”的 WCF 服务。
服务本身根据本地文件检查用户名+密码,
如果不匹配 - 它会抛出带有消息的FaultException。
.
当我同步使用该服务时,它工作正常。
当我去使用它ASYNC时,我遇到了问题。
如果我传递了错误的“用户名+密码”凭据 - 并打开客户端,
而不是立即从进入我的“Channel_Faulted()”方法的服务返回,
客户端线程只是等到超时触发,
然后我得到一个'TimeoutException'。
try
{
client = new MyServiceClient("WSDualHttpBinding_IMyervice");
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "bad password";
client.ChannelFactory.Faulted += new EventHandler(ChannelFactory_Faulted);
client.Open(); // This hangs for 01:00:00 minute
// Doesn't reach here
client.DoSomethingCompleted += new EventHandler<DoSomethingEventArgs(client_DoSomethingCompleted);
client.DoSomethingAsync(param);
}
catch (Exception ex)
{
// Enters here with a 'TimeoutException' exception
}
为什么客户端没有触发我的“故障”方法?
为什么即使在 'CustomUserNameValidator' 的 'Validate' 方法期间服务通过 'FaultException' 服务,它也会等待来自服务的响应?