5

在我的 WCF Web 服务上使用我的一种 Web 方法时,我收到了那个奇妙的模棱两可的错误消息。由于该错误消息没有提供任何解释,因此我可以发表我的理论。

我相信这可能与我正在使用的返回类型有关

我有一个类型 DLL,它在 web 服务和客户端中都被引用。在这个 DLL 中是基类 ExceptionMessages。这个类有一个名为 DrawingExcepions 的子类。

这是一些代码:

public class ExceptionMessages
{
    public object[] ReturnValue { get; set; }
}

public class DrawingExceptions : ExceptionMessages
{
    private List<DrawingException> des = new List<DrawingException>();
}

public class DrawingException
{
    public Exception ExceptionMsg { get; set; }
    public List<object> Errors { get; set; }
}

使用代码:

    [OperationContract]
    ExceptionMessages createNewBom(Bom bom, DrawingFiles dfs);

    public ExceptionMessages createNewBOM(Bom bom, DrawingFiles dfs)
    {
            return insertAssembly(bom, dfs);
    }

    public DrawingExceptions insertAssembly(Bom bom, DrawingFiles dfs)
    {
        DrawingExceptions des = new DrawingExceptions();

        foreach (DrawingFile d in dfs.drawingFiles)
        {
            DrawingException temp = insertNewDrawing(bom, d);
            if (temp != null)
                des.addDrawingException(temp);

            if (d.Child != null)
                des.addDrawingException(insertAssembly(bom, d.Child));
        }

        return des;
    }

返回:

    ExceptionMessages ems = client.createNewBom(bom, currentDFS);

    if (ems is DrawingExceptions) { }

基本上,webmethod 的返回类型是 ExceptionMessages 但是我通常会将子类发送回来。

我唯一的想法是导致错误的是孩子,但据我所知,这应该没有效果。有没有人知道这里可能出了什么问题?

如果需要更多信息,请询问:)

谢谢。

4

4 回答 4

5

是的,这条消息很棒:)

我经常发现启用跟踪很有帮助,如本文所述。查看名为“部署或调试的推荐设置”的部分。

于 2010-05-21T12:24:21.740 回答
3

返回大型有效负载时出现此错误,事实证明是 DataContractSerialiser 停止了中间流,因为它已达到默认的 maxItemsInObjectGraph 设置,将以下内容添加到我的端点行为解决了问题。

<dataContractSerializer maxItemsInObjectGraph="2147483647" />
于 2011-10-19T07:16:28.757 回答
3

我遇到了同样的问题,我发现这篇文章是我的 WCF 服务遇到的超时错误的可能解决方案。就我而言,squig 的回答提供了有关潜在状况的线索。虽然增加最大有效载荷的大小很容易,但这显然是一个具有性能影响的选项。

就我而言,我正在上传要保存的对象图,然后将更新后的对象返回给我的客户端,以便我可以跟踪外键等。对于我的问题,问题是它怎么会变得更大回程。我四处寻找,令我震惊的是,扩展有效负载大小的根本原因是,当我将子对象添加到对象图中时,这些子对象的导航属性添加了对父对象的引用,该父对象具有对子对象的引用,并且依此类推。

我去了我的 edmx 文件,从有问题的子对象中删除了导航属性,并且我的包大小被驯服了。

希望这对其他人有帮助!

于 2012-03-20T15:37:51.977 回答
0

我刚刚遇到了同样的问题,但是上面的答案都没有解决问题。

我带回了一个 LINQ 对象列表,数据库已正确设置所有关系,这导致对象与 LINQ 自动链接......这使查询停止工作。

我通过从 LINQ DBML 中删除关系解决了这个问题

于 2012-09-21T11:17:46.610 回答