继承可以用于WCF故障详细信息吗?

时间:2018-10-10 17:12:18

标签: .net wcf soap

在WCF SOAP服务中,是否可以使用已知的类型机制来正确传播FaultException,并带有FaultContract属性中未明确提及的详细元素?

示例:

// Basic service definition:

[ServiceContract]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypesProvider))]
public interface IService
{
    [OperationContract]
    [FaultContract(typeof(FaultBase))]
    void Test();
}

[DataContract]
public class FaultBase
{
}

public class Service : IService
{
    public void Test()
    {
        subsystem.Do();
    }
}

// Elsewhere (in a subsystem):
[DataContract]
public class SpecificFault : FaultBase
{
}


public class Subsystem()
{
    public void Do()
    {
        throw new FaultException<SpecificFault>(new SpecificFault());
    }
}

说明:

服务协定定义了具有错误类型FaultBase的FaultContract。服务实现调用一个子系统,该子系统希望引发特定类型的故障,称为SpecificFault。由于SpecificFault问题是子系统的局部问题,因此使用FaultContract属性将其列出是不切实际的。

给出的示例代码将导致对SpecificFault类一无所知的服务和WSDL。

如果我使用已知的类型提供程序来注入SpecificFault类,则数据契约确实会显示在WSDL中。

问题在于,即使WSDL中存在SpecificFault,该异常也将作为非通用FaultException出现在客户端上,而没有对SpecificFault对象的跟踪。

问题: 是否使用已知的类型系统应该用于注入故障详细信息,但服务方法的FaultContract属性中未明确提及?

注意:我知道客户端无法使用基本故障类捕获这些异常,因为FaultException不会从FaultException继承。这个问题是关于使用正确的类型将它们发送给客户端,以便客户端可以使用特定类型或非通用FaultException捕获它,并在需要时进行反射以找到确切的类型。

0 个答案:

没有答案