0

Flexで使用できるようにC#を使用してASP.NETにSOAPサービスを実装しようとしていますが、それが次のステップです。私が抱えている問題は、クラス内にフィールドを持つサーバー側のクラスと通信しようとしていることですXmlNamespaceManager[Serializable]

[Serializable]
public class Site {
...
public XmlNamespaceManager xmlNS;
...
}

問題のあるフィールドにフックを追加しようとしまし[NonSerialized]たが、SOAPサービスが私の指示に従わないようです。サービスは次のとおりです。

public class DotNetWikiService : WebService
{

    [WebMethod]
    public Article doWork(Site ws, String title)
    {
        Page thePage = new Page(ws, title);
        thePage.Load();

        if (thePage.Exists() == false)
        {
            return new Article(title, "Wiki page contents are empty.");
        }

        return new Article(title, thePage.text);
    }
}

.asmxファイルを実行しようとするとエラーが発生します。

XMLをシリアル化するには、IEnumerableから継承する型に、継承階層のすべてのレベルでAdd(System.Object)を実装する必要があります。System.Xml.XmlNamespaceManagerはAdd(System.Object)を実装していません。

今、私はXmlNamespaceManagersがシリアル化できないことを知っているので、これを示しようとしましたが、何かがうまくいかず、どうしたらよいかわかりません。

助けてください?:D

4

1 に答える 1

1

私はあなたの問題を再現することができました、そして私の小さなテストでそれを解決したようです...

最初は同じエラーが発生しましたが、ここで重要なのはエラーではなくスタックトレースです。これが私が得たもののちょっとした断片です、そしてあなたが似たようなものを見たと思います:

System.Xml.Serialization.TypeScope.GetEnumeratorElementType(Type type, TypeFlags& flags) +1354352
System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type, MemberInfo memberInfo, Boolean directReference) +5553239

したがって、ここで、使用されているシリアライザーが、スタックトレースで参照されている名前空間に基づくXmlSerializerであるというヒントが得られます。System.Xml.Serializationしかし、[NonSerialize] 属性を見ると、それがBinaryFormatterとSoapFormatterに適用されるが、XmlSerializerクラスを使用する場合には適用されないことがメモに示されています。その場合、この属性を使用する必要があります。

これを行うと、このパブリックメンバーの定義が次のようになります。

[XmlIgnore]
public XmlNamespaceManager xmlNS;

私は少しテストクラスを作りました:

[Serializable]
public class Site
{
    public string X { get; set; }

    [XmlIgnore]
    public XmlNamespaceManager xmlNS;
}

そして、サービスメソッドからそれを返しました:

    [WebMethod]
    public Site HelloWorld()
    {
        Site toReturn = new Site();
        toReturn.X = "hello world";

        return toReturn;
    }

それを実行すると、ブラウザに表示されました。メソッドをテストしたところ、SOAP構造で「helloworld」が返されました。

于 2013-03-22T06:33:14.877 に答える