我们有这样的网络服务:
[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。
感谢。
答案 0 :(得分: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;
}