5

WCF WebサービスでWebメソッドの1つを使用すると、あいまいなエラーメッセージが表示されます。そのエラーメッセージは私が私の理論を投稿することを可能にするものは何も説明を提供しないので。

私が使っているリターンタイプと関係があるのではないかと思います

Webサービスとクライアントの両方で参照されるTypesDLLがあります。この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

大きなペイロードを返すときにこのエラーが発生しました。デフォルトのmaxItemsInObjectGraph設定に達したため、DataContractSerialiserが途中で停止し、エンドポイントの動作に以下を追加すると問題が修正されました。

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

同じ問題が発生し、WCFサービスで発生していたタイムアウトエラーの解決策としてこの投稿に出くわしました。私の場合、squigの答えは、根本的な状態に関する手がかりを提供しました。最大ペイロードのサイズを大きくするのは簡単ですが、それは明らかにパフォーマンスに影響を与えるオプションです。

私の場合、保存するオブジェクトグラフをアップロードしてから、更新されたオブジェクトをクライアントに返して、外部キーなどを追跡できるようにします。私の問題では、どうしてこれほど大きくなったのでしょうか。帰路。掘り下げてみると、ペイロードサイズが拡張された根本的な原因は、オブジェクトグラフに子オブジェクトを追加したときに、それらの子オブジェクトのナビゲーションプロパティが、子への参照を持つ親への参照を追加したことであることに気付きました。などなど。

edmxファイルに移動し、問題のある子オブジェクトからナビゲーションプロパティを削除すると、パッケージサイズが調整されました。

これが他の誰かに役立つことを願っています!

于 2012-03-20T15:37:51.977 に答える
0

私はちょうど同じ問題を抱えていましたが、上記の答えのどれも問題を解決しませんでした。

LINQオブジェクトのリストを戻していましたが、データベースにはすべての関係が正しく設定されているため、オブジェクトは自動的にLINQにリンクされます...これにより、クエリが機能しなくなりました。

LINQDBMLから関係を削除することでこれを解決しました

于 2012-09-21T11:17:46.610 に答える