[英]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.