1

WCF ホスト アプリケーション プールが起動するたびに、最初の WCF 呼び出しを行うクライアントは常に "System.Xml.XmlException: There are multiple root elements" をスローします。後続の呼び出しはすべて完全に機能します。

この例外は、WCF 要求のコンシューマー/クライアント側で発生します。完全な WCF クライアントと Silverlight クライアントの両方でこれをテストしました。basicHttpBinding、セキュリティなし、および aspnetCompatabilityMode = true を使用しています

アプリプールが生きていれば大したことではありませんが、アクティビティがないとシャットダウンし、バックアップを開始するとエラーが再び発生します。

また、アプリケーション プールは、WCF 以外の要求から別のページに開始される場合があることにも言及する必要があります。ただし、WCF が初めて呼び出されると、クライアント側でこの例外がスローされます。

誰もこれを見たことがありますか?必要に応じて詳細を提供できます。

ありがとう

4

2 に答える 2

3

さて、これらのオプションを調査した後、問題の原因を突き止めました。最終的に、継承と、交換されるデータにシリアライズ可能な属性と DataContract の両方の属性を持つことは、応答の逆シリアル化との違いはありませんでした。

問題の本質は私の構成にありました。以前は、ストリーミング メッセージで遊んでいました。ホストの transferMode を Streaming に設定したままにし、クライアントを Buffered に設定しました。Silverlight では、それが私の唯一の選択肢です。メッセージがチャンクされていたため、シリアライゼーションの問題が発生しました。いくつかの呼び出しをトレースした後、これに気付きました。

とても簡単に修正できます。transferMode を Buffered に切り替えます。ストリーミング用に別のエンドポイントをセットアップして、別の機会にそれで遊ぶつもりです。CRUD サービスをストリーミングする必要はありません。

皆様のご意見をお寄せいただきありがとうございます。

-ネイサン

于 2009-07-17T00:48:46.900 に答える
0

シリアル化の問題のように思えます。DataContracts の作成方法を調査します。XML シリアライゼーション属性ではなく、DataContracts を使用していますか?

編集:コメントに基づいて、リファクタリングの推奨事項を示します。

[DataContract] 
public class ImageEffectExcludeParamRequest
{ 
    [DataMember] 
    public string ImageID { get; set; } 

    [DataMember] 
    public int EffectID { get; set; } 

    [DataMember]
    public ResponseInfo AdditionalInfo { get; set; }
}


[DataContract] 
public class ResponseInfo 
{ 
    [DataMember] 
    public Enums.ServiceResponse.Status Status { get; set; } 

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

継承ではなく構成を使用すると、問題が解決するはずです。

于 2009-07-16T14:46:51.493 に答える