我知道WCF会将异常转换为故障并将其作为肥皂消息发送回,但我想知道这是否确实可以互操作。我想我很难弄清楚这种可能的情况:

  1. 客户端(Java)调用WCF服务(LoginService)。
  2. 服务器检查是否适当授权,用户授权失败。
  3. 服务器抛出未授权的accessexception。
  4. WCF以某种方式将其转换为故障。 (* - 也请参见下文)
  5. 客户必须能够知道如何读取此故障。

我想我只是很难理解这仍然可以互操作,因为它希望Java知道如何翻译肥皂故障,该错误是根据未经授权的Accessexception编码的。

  • 另外,.NET如何实际上将异常转换为故障,是故障代码,名称等。某些事情似乎是“ duh”,也许是故障名称是“未授权的accessexception”,但是我' D肯定知道而不是猜测。
有帮助吗?

解决方案

没有“自动转换”。当您有未经治疗的例外时,WCF会返回错误(我忘记哪一个)。但是,由于您没有声明这一错误,因此,如果您返回,客户将失败。

您本来要定义自己的缺点并归还它们。考虑:

[DataContract]
public class MySpecialFault
{
    public string MyMessage { get; set; }
}

[ServiceContract]
public interface IMyService
{
    [FaultContract(typeof (MySpecialFault))]
    [OperationContract]
    void MyOperation();
}

public class MyService : IMyService
{
    public void MyOperation()
    {
        try
        {
            // Do something interesting
        }
        catch (SomeExpectedException ex)
        {
            throw new FaultException<MySpecialFault>(
                new MySpecialFault {MyMessage = String.Format("Sorry, but {0}", ex.Message)});
        }
    }
}

任何能够处理故障的客户都会解决这个问题。 WSDL将定义故障,他们将看到一个错误的详细元素,其中包含发送的myspececealfault实例的序列化版本。他们将能够阅读该实例的所有属性。

其他提示

自v1.1以来,故障一直是肥皂规范的一部分。他们在 肥皂规范.

由实施(WCF,Java等)确保根据规范处理故障。

由于WCF根据SOAP规范将FARSEXCEPTIONS转换为故障,因此从WCF抛出的FARSEXCEPTIONS是可互操作的。

肥皂断层是可互操作的,但是.NET异常类不适用于肥皂断层。取而代之的是定义您自己的数据合同类(例如AccessFault),然后在Fardtract中使用它。看 http://msdn.microsoft.com/en-us/library/ms733841.aspx

每当在服务边界上抛出未授权的accessexception时,将其转换为fallexception。这可以通过几种方式完成,例如使用Microsoft Enterprise库异常处理块或实现IERRORHANDLER界面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top