0

我们有以下 WCF 服务合同:

[ServiceContract(Namespace = "http://example.com", Name = "Service1")]
public interface IService1
{      
  [OperationContract]
  [FaultContract(typeof(Fault1))]
  ValidateUserResult ValidateUser(
                       string username, 
                       string password);
}

[ServiceContract(Namespace = "http://example.com", Name = "Service1")]
public interface IService1Async
{      
    [OperationContract(AsyncPattern = true)]
    [FaultContract(typeof(Fault1))]
    IAsyncResult BeginValidateUser(
                       string username, 
                       string password, 
                       AsyncCallback callback, 
                       object userState);

    ValidateUserResult EndValidateUser(IAsyncResult asyncResult);
}

[DataContract(Namespace = "http://example.com")]
public class Fault1
{
}

我们在客户端调用 ValidateUser 的异步版本,并FaultException<Fault1>在服务器上抛出 a ,但客户端收到的只是 base FaultException

没有收到合同规定的过错可能是什么原因?

4

2 回答 2

1

我们现在找到了原因。我们正在使用 ProvideFault 方法从服务行为生成故障。在那里,我们使用类似于msdn 中 IErrorHandler.ProvideFault示例的代码

唯一的区别是我们没有对Message.CreateMessage过载采取正确的行动。我们准确地复制了在我们手动抛出错误的情况下生成的内容,瞧。

我没有提供最后一个细节的借口:-)

于 2010-04-09T16:57:14.217 回答
0

你能告诉我们你的电话的catch语句吗?合同和一切在我看来都很好...

你按什么顺序检查故障??您必须在检查或检查FaultException<Fault1> 之前检查- 您可能会以某种方式混淆该订单吗?FaultExceptionCommunicationException

当您调用该方法的同步版本时它是否有效?

于 2010-04-09T15:53:43.777 回答