XmlElementTreeNodeというカスタムオブジェクトを返すWCFサービスを作成しました。私は正常にこの方法でこれらのノードの階層構造を作成することができていますWCFでカスタムクラスを返す
[DataContract]
public class XmlElementTreeNode
{
[DataMember]
public string Name { get; set; }
[DataMember]
public List<string> Attributes { get; set; }
[DataMember]
public List<XmlElementTreeNode> Children { get; set; }
public XmlElementTreeNode() { }
}
:
[OperationContract]
public XmlElementTreeNode GetTreeView(string initialSchemaUri)
{
Uri uri = new Uri(initialSchemaUri, UriKind.Absolute);
XPathSorter sorter = new XPathSorter(uri);
XmlElementTreeNode theNode = sorter.rootTreeNode;
return theNode;
}
しかし、私は戻って取得エラーは次のようになります。これは、オブジェクトがどのように見えるかです
CommunicationException was unhandled by user code
The remote server returned an error: NotFound.
Reference.csのこの方法で:
public SilverlightApplication.SchemaServiceReference.XmlElementTreeNode EndGetTreeView(System.IAsyncResult result)
{
object[] _args = new object[0];
SilverlightApplication.SchemaServiceReference.XmlElementTreeNode _result = ((SilverlightApplication.SchemaServiceReference.XmlElementTreeNode)(base.EndInvoke("GetTreeView", _args, result)));
return _result;
}
代わりにtheNode.Name
とtheNode.Attributes
を返すサービスを書きました。それらの両方が働いた。私もtheNode.Children
を返すようにサービスを書き直しました。同じ正確なエラーが出ます。
私はこのエラーを取得するときに、サービスがなかったのでそう、私は、Silverlightでこのコードに到達することはありません「仕上げを。」
void service_GetTreeViewCompleted(object sender, GetTreeViewCompletedEventArgs e)
{
XmlElementTreeNode rootNode = e.Result;
}
しかし、私はこれが興味深いことを発見しました。私はreturn theNode
をreturn theNode.Children[0]
に変更しました。だから、私はまだSilverlightにXmlElementTreeNodeオブジェクトを返しています。私がこれをしたとき、私はservice_GetTreeViewCompleted
メソッドに到達し、ノードのツリーにアクセスできました(ただし、ルートノードの最初の子からのみ開始します)。私はこれがうまくいくと思っていますが、 "ルート"ノード(元のtheNode
変数)ではないと思います。
誰もが、私は私のtheNode
変数を返すことができますどのように任意のアイデアがありますか?私はWCFを完全に新しくしているので、おそらく私が気づいていない複雑なカスタムオブジェクトを適切に返すための別の方法があります。
更新1
XSDドキュメントによって定義されたマイXmlElementTreeNode
オブジェクトは、XML要素を表します。 XmlElementTreeNodes
の生成された階層は、私のサービスに渡されるXSD URIに対して検証されたXMLファイルで作成される可能性のあるすべての要素を表します。 theNode.Children
の最初の要素はノードの小さなツリーだけを表します。しかし、何千ものサブノードを持つtheNode.Children[1]
を返そうとしましたが、同じエラーが発生します。ですから、問題は、theNode
オブジェクト全体のサイズが単に大きすぎるということです。
私は、Web.configファイルに次のように私のバインディング編集しようとした:でも、これらの巨大な値で、私は同じエラーを取得し、
<binding name="SilverlightApplication.Web.SchemaService.customBinding0">
<textMessageEncoding>
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" />
<binaryMessageEncoding maxReadPoolSize="2147483647" maxSessionSize="2147483647" maxWritePoolSize="2147483647" />
</binding>
しかし。
、私は私のために、この応答を得ましたサービス: "ReadResponse()が失敗しました:サーバーはこの要求に対する応答を返しませんでした。トレースを有効にする方法も見ていきます。 –
ビデオはとても役に立ちました。しかし、私はそのビデオで何度も試してみたところ、どんなタイプのデバッグ結果でも1つのケースしか持っていなかった。 ServicesReferences.ClientConfigでサービスを更新して、相対パス( 'http:// localhost:12345/SchemaService.svc'の代わりに' ../ SchemaService.svc')を使用すると、TimeoutExceptionがユーザーコードによって処理されていません。サーバーがVisual StudioでNotFoundというエラーを返しました。しかし、FiddlerやViewDetail - > InnerException/StackTraceなどに何も追加されなかった。 –
"ReadResponse()が失敗しました:サーバーは応答を返しませんでした" - 実際にサーバーに到達する要求ですか? http:// localhost ...を使用するときに何も表示されない場合、IIRCのフィドラーは* localhost *に送信されたリクエストを捕捉しません。マシン名に送信する必要があります(また、マシンを使用してSLページを開く必要があります) localhostではなくlocalhostを使用してドメイン間の問題を回避する) – carlosfigueira