使用ASMX WebService传递和获取对象

本文关键字:获取 取对象 ASMX WebService 使用 | 更新日期: 2023-09-27 18:04:27

我们有这样的web服务:

[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

但如果我们在网络服务中加入这样一个有趣的功能:

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

那么一切都好。这是因为在添加有趣的函数之前,CallResult没有出现在WSDL文件中,因为它没有出现在任何WebMethod中。

问题是:如何通知C#在WSDL文件中生成CallResult,即使它没有在任何WebMethod中明确使用。我们使用VS2005。

谢谢。

使用ASMX WebService传递和获取对象

您可以使用GenerateScriptTypeAttribute标记类。

在某些情况下,即使类型对应于输入参数或返回Web服务方法的值,则不会生成代理自动地在这种情况下,必须使用GenerateScriptTypeAttribute属性来为生成代理对象类型。

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