WCFはXmlDataDocument.DocumentElementからのXmlElementを返すことはできません
-
19-09-2019 - |
質問
私は次のようになり、複合オブジェクトを返す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">
それはあなたにうまくいけば、あなたにうまくいかない何アイデアを提供し、より意味のあるエラーを与える必要があります。
そうでなければ、あなたのサーバー側のコードにデバッグし、そこに何が起こっているかを知る必要があります。