簡體   English   中英

從服務器端調用asmx

[英]calling asmx from server side

我在一個服務器1上編寫了一個asmx服務,在另一服務器2上編寫了asp.net/c#。

我想將dictionary<string,string>從srv1傳輸到srv2。 我讀到Dictionary不可序列化,應該作為List<KeyValuePair<string,string>>

在srv2上,我嘗試讀取結果,但類型如下:

KeyValuePairOfStringString[] result = response.GetTemplatesParamsPerCtidResult;

我嘗試檢索鍵,值,但無法展開每個元素:

 foreach (var pair in result)
   {
// pair has just 4 generic methods: toString, GetHashCode,GetType,Equals
   }

我該怎么做呢? 在實現過程中我應該改變什么嗎?

TIA

如何使用數組MyModel[]其中MyModel看起來是這樣的:

public class MyModel
{
    public string Key { get; set; }
    public string Value { get; set; }
}

公開SOAP Web服務時應避免泛型。

XmlSerializer默認情況下不會序列化實現IDictionary的對象。

解決此問題的一種方法是編寫一個新類,該類包裝IDictionary對象並將值復制到可序列化對象的數組中。

因此,您可以編寫這樣的類:

public class DictionarySerializer : IXmlSerializable
{
    const string NS = "http://www.develop.com/xml/serialization";

    public IDictionary dictionary;

    public DictionarySerializer() 
    {
        dictionary = new Hashtable();
    }
    public DictionarySerializer(IDictionary dictionary)
    {
        this.dictionary = dictionary;
    }

    public void WriteXml(XmlWriter w)
    {
        w.WriteStartElement("dictionary", NS);
        foreach (object key in dictionary.Keys)
        {
            object value = dictionary[key];
            w.WriteStartElement("item", NS);
            w.WriteElementString("key", NS, key.ToString());
            w.WriteElementString("value", NS, value.ToString());
            w.WriteEndElement();
        }
        w.WriteEndElement();
    }

    public void ReadXml(XmlReader r)
    {
        r.Read(); // move past container
        r.ReadStartElement("dictionary");
        while (r.NodeType != XmlNodeType.EndElement)
        {            
            r.ReadStartElement("item", NS);
            string key = r.ReadElementString("key", NS);
            string value = r.ReadElementString("value", NS);
            r.ReadEndElement();
            r.MoveToContent();
            dictionary.Add(key, value);
        }
    }
    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return LoadSchema();
    }
}

然后,您使用此返回類型創建webservice方法。

[WebMethod]
public DictionarySerializer GetHashTable()
{
    Hashtable ht = new Hashtable();
    ht.Add(1, "Aaron");
    ht.Add(2, "Monica");
    ht.Add(3, "Michelle");
    return new DictionarySerializer (h1);
}

如果您需要更多信息,則本文包含有關此技術的一些信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM