标签: wcf-faults

如何跟踪WCF序列化问题/异常

我偶尔会遇到在WCF序列化期间抛出应用程序异常的问题(从我的OperationContract返回DataContract之后).我得到的唯一(而且意义不大)消息是

System.ServiceModel.CommunicationException:基础连接已关闭:连接意外关闭.

没有任何洞察内部异常,这使得很难找到序列化过程中导致错误的原因.

有人知道如何跟踪,记录和调试这些异常的好方法吗?或者甚至可以更好地捕获异常,处理它们并将定义的FaulMessage发送给客户端?

谢谢

.net c# wcf wcf-faults wcf-serialization

9
推荐指数
1
解决办法
6854
查看次数

单元测试WCF故障

从WCF服务单元测试预期故障的最佳方法是什么?

我正在尝试对WCF服务进行单元测试,该服务(正确地)抛出FaultExceptions以获得某个可重现的错误.单元测试获取WCF客户端的实例并调用适用的服务方法,该方法抛出FaultException.

所有这些都可以按照您的预期运行,但是我对单元测试很困难,因为当服务实现中没有捕获到错误时,错误会导致IDE崩溃.因为我使用的是故障而不是异常,所以我希望IDE能够序列化异常并将其发送到客户端,在那里它会引发异常.

我确实看到有一个配置选项来禁用特定用户未处理异常的中断,但我希望有人能指出一种更好的方法来实现相同的结果,因为这在团队环境中不容易实现.

下面是一些示例代码,介绍了当前实现的内容......

单元测试项目有一个对我的WCF服务的服务引用,我已经定义了这样的接口:

[OperationContract(Name = "DoSomething")]
[FaultContract(typeof(EpicFail))]
ResponseObject DoSomething(RequestObject requestObject);
Run Code Online (Sandbox Code Playgroud)

故障定义如下:

[DataContract]
public class EpicFail
{

    public EpicFail(string action)
    {
        this.Reason = "Epic Fail";
        this.Action = action;
    }

    [DataMember]
    public string Reason
    {
        get;
        set;
    }

    [DataMember]
    public string Action
    {
        get;
        set;
    }

}
Run Code Online (Sandbox Code Playgroud)

调用该服务的代码看起来像这样:

[TestMethod()]
[ExpectedException(typeof(FaultException<EpicFail>))]
public void FaultTest_Fails_Epicly()
{
    bool testPassed = false;

    try
    {
        ResponseObject resp = GetServiceClient().DoSomething(req);
    }
    catch (FaultException<EpicFail>)
    {
        testPassed = true;
    }

    Assert.IsTrue(testPassed);
}
Run Code Online (Sandbox Code Playgroud)
  • 我编辑了代码以显示我正在使用ExpectedException属性,并且当在服务中抛出异常时,它似乎没有对保持IDE/Debugger中断有太大影响.

c# wcf unit-testing wcf-faults faultexception

9
推荐指数
1
解决办法
4643
查看次数