質問

私は次のようになり、複合オブジェクトを返すWCF Webサービスを構築しています

    [DataContract]
    public class WebServiceReturn
    {
        ...

        [DataMember]
        public XmlElement Results { get; set; }

        ...
    }
私は次のコードでWebServiceReturnオブジェクトを返すときに

、すべてが正常です。

    XElement cities = new XElement("Cities",
                          from r in results
                          select new XElement("City", r));            

    using (XmlReader xmlReader = cities.CreateReader())
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlReader);
        WebServiceReturn response = new WebServiceReturn();
        response.Results = xmlDoc.DocumentElement;
    }
私はXmlDataDocumentを返すストアド・プロシージャ・コールの結果からのXmlElementをとる以下のコードを使用する場合、

しかし、て、CommunicationExceptionが(何内の例外を持たない)スローされます。

XmlDataDocument xdd = DataAccess.ExecuteXML("MyStoredProc", parameter);
response.Results = xdd.DocumentElement;

IでのXElementに(のXmlElementである)XmlDataDocument.DocumentElementを変換した後、背面のXmlElementに、何ら問題は(WOWそれは一口であった)が存在しない場合紛らわしい部分がある - したがって、次のコードは問題なく返さます。

        XmlElement xe = DataAccess.ExecuteXML("MyStoredProc", parameter).DocumentElement;
        XDocument xDoc = new XDocument();
        using (XmlWriter xmlWriter = xDoc.CreateWriter()){
            xe.WriteTo(xmlWriter);
        }

        using (XmlReader xmlReader = xDoc.Root.CreateReader())
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlReader);
            response.Results = xmlDoc.DocumentElement;
        }   
<時間>

て、CommunicationExceptionの詳細は以下のとおりです。

[て、CommunicationException:サーバーは、意味のある応答を提供していませんでした。これは、契約の不一致、早期セッションのシャットダウンまたは内部サーバーエラーによって引き起こされている可能性があります。

私はまた私のテストアプリケーションでのサービス参照に影響を与えなかった複数回更新しました。

Webサービスを呼び出している私のテストコードの問題ですか?なぜ問題を修正するバックのXmlElementに、その後のXElementにのXmlElementを変換しますか?すべてのすべての情報ははるかに高く評価されるだろう! :)

役に立ちましたか?

解決

私はXmlDataDocumentについて奇数何も知りませんが、必ずしもXDocument必要はありません - しようとします:

XmlDocument newDoc = new XmlDocument();
newDoc.Load(new XmlNodeReader(doc.DocumentElement));
return newDoc.DocumentElement;

まだ理想的ではないが、それは...

私にはきれいに見えます

他のヒント

まあ、より多くのエラー情報を取得するためには、あなたのサーバの障害のデバッグの詳細を有効にする必要があります - あなたが今取得しているメッセージは、一般的な、明らかナッシングツー可能-攻撃WCFエラーですメッセージは、基本的に言って:何かが間違っていた。

そのためには、あなたはあなたのサービスの設定を微調整する必要がある - (お持ちでない場合)、このセクションを追加します:

<behaviors>
  <serviceBehaviors>
    <behavior name="MEXandDebug">
      <serviceMetadata />
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

と、あなたのサービス定義からそのセクションを参照します:

<services>
  <service behaviorConfiguration="MEXandDebug" name="WCFService.MyWCFService">

それはあなたにうまくいけば、あなたにうまくいかない何アイデアを提供し、より意味のあるエラーを与える必要があります。

そうでなければ、あなたのサーバー側のコードにデバッグし、そこに何が起こっているかを知る必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top