簡體   English   中英

使用ASMX WebService傳遞和獲取對象

[英]Pass and get object with ASMX WebService

我們有這樣的網絡服務:

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object[] DoSmt(object[] inParams)
{
    List<object> rsl = new List<object>();
    rsl.Add(DateTime.Now);
    rsl.Add(new CallResult());
    return rsl.ToArray();
}

CallResult類在Web服務中定義。 我們從WinForms調用此方法(在向該Web服務添加Web引用之前):

Service svc = new Service();
object[] arrRsl = svc.DoSmt(new object[] { "hi there", "hello" });

我們得到一個例外說

應用不知道如何反序列化CallResult

但是,如果我們將這樣的有趣函數放入Web服務中:

[WebMethod(EnableSession = true)]
public void Fun(CallResult abc)
{
    // Do nothing
}

那一切都還好 這是因為CallResult在添加滑稽函數之前沒有出現在WSDL文件中,因為它沒有出現在任何WebMethod

問題是: 即使未在任何WebMethod顯式使用C#,如何通知C#在WSDL文件中生成CallResult 我們使用VS2005。

謝謝。

您可以使用GenerateScriptTypeAttribute標記該類。

在某些情況下,即使類型對應於Web服務方法的輸入參數或返回值,也不會自動生成代理。 在這種情況下,必須使用GenerateScriptTypeAttribute屬性來生成該類型的代理對象。

[GenerateScriptType(typeof(ColorObject), ScriptTypeId = "Color")]
[WebMethod]
public string[] GetDefaultColor()
{
    // Instantiate the default color object.
    ColorObject co = new ColorObject();

    return co.rgb;
}

暫無
暫無

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

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