2011-08-03 91 views
0

通行證和得到的對象,我們有這樣一個Web服務:與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中。

現在的問題是:如何通知C#在WSDL文件中生成CallResult,即使它沒有明確用於任何WebMethod。我們使用VS2005。

謝謝。

回答

0

您可以用GenerateScriptTypeAttribute標記該類。

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

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

    return co.rgb; 
} 
+0

.NET 2.0中只需添加[XmlInclude(typeof運算(CallResult))] – QuangND