gpt4 book ai didi

WCF : FaultContract(typeof(ExceptionDetail)) issue

转载 作者:行者123 更新时间:2023-12-04 17:13:37 25 4
gpt4 key购买 nike

我把属性 [FaultContract(typeof(ExceptionDetail))]我的运营契约(Contract)。当我尝试将服务添加到客户端应用程序时,我收到此错误 - "Custom tool error: Failed to generate code for the service reference 'ServiceReference1'. Please check other error and warning messages for details."
但是当我注释掉 FaultContract 属性时,我可以将 wcf 服务引用添加到我的客户端应用程序中。

最佳答案

拥有 FaultContracts 的目的首先是可以从服务中传回 SOAP 错误,这不会破坏服务器和客户端之间的通信 channel (优雅且可互操作地处理 .NET 异常等错误条件),其次,使用 FaultContracts,您的服务器会抛出类型错误 (FaultException<T>),您的客户端可以捕获这些错误。

如果您想要或需要真正具有互操作性,您需要:

  • 将所有 FaultContract 类型定义为用 [DataContract] 属性
  • 修饰的类
  • 捕获服务器上的所有 .NET 异常(使用例如 IErrorHandler 接口(interface))并将它们转换为可互操作的 SOAP 错误

  • 如果你控制了线的两端并且两端都是.NET,那么你可以简化一步:在服务器上,处理所有.NET异常并将它们变成例如。 FaultException<ArgumentOutOfRangeException> ,也就是说,创建一个“(无论是什么 .NET 异常)的故障”,然后在客户端上,捕获那些键入的 FaultException 并处理它们:
    [FaultContract(typeof(ArgumentOutOfRangeException)]
    [OperationContract]
    public void CallService(.......)

    然后在你的实现中,使用这个:
    try
    {
    clientProxy.CallService();
    }
    catch(FaultException<ArgumentOutOfRangeException> ex)
    {
    // handle the most specific exception first
    }
    catch(FaultException ex)
    {
    // handle all other, unspecific server faults
    }
    catch(CommunicationException ex)
    {
    // handle all other, client-proxy related WCF errors
    }
    catch(Exception ex)
    {
    // handle anything else....
    }

    关于WCF : FaultContract(typeof(ExceptionDetail)) issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470607/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com