C#WebService返回dynamic类型报错问题

本文讨论了在C# WinForm应用中调用WebService时遇到的关于dynamic类型的异常问题。当WebService返回非简单类型如数组或对象数组时,会引发 InvalidOperationException。解决方法是在WebService类中添加相应返回类型的辅助方法,使XML能够处理这些类型。问题在.NET 4下XP环境中出现,不确定高版本是否已修复,并批评了微软频繁更新导致的兼容性问题。
摘要由CSDN通过智能技术生成

        近期在写WinForm调用WebService的相关程序,遇到一些“莫名其妙”的问题:

System.InvalidOperationException: 生成 XML 文档时出错。 ---> System.InvalidOperationException: 类型 System.String[] 不能在此上下文中使用。

System.InvalidOperationException: 生成 XML 文档时出错。 ---> System.InvalidOperationException: 类型 System.Int32[] 不能在此上下文中使用。

System.InvalidOperationException: 生成 XML 文档时出错。 ---> System.InvalidOperationException: 不应是类型 Aspx_new.tinvoke。使用 XmlInclude 或 SoapInclude 特性静态指定非已知的类型。

       之前曾经测试过用WebService返回自定义的类,都能正常返回,难道系统自带的类型却不劫持?后来测试直接返回自定义类型竟然是正常的,再次调用返回dynamic类型的方法,又不报错了。:<

         最后测试发现,返回dynamic类型时所有非简单值的还回都”可能“报错,如果返回值不是简单类型(基本类型:int,string),比如数组、对象数组等必须保证当前类中有一个方法返回值是这种类型。

    public class CallServer : WebService
    {

        [WebMethod] 这个方法返回dynamic类型或object类型因为它是用来调用其它类的方法的,返回值不确定
        public object |dynamic  CallServerMethod(string classFullName, string methodName, params object[] parameters) //
        {}

        [WebMethod] 如果CallServerMethod要返回整型数组,这样就不会报错。其它类型 同理。
        public int[] GetIntArr()

       {  return null;    }

}

分析原因,可能是非简单类型,XML没有对应的处理结构,所以会报错,当类中包含相应的特殊类型后,XML会预先生成相应的处理结构,就不会报错。这个猜测在客户端调用的的代码中同样适用,即用开发工具生成的Web引用类如果使用了dynamic类型方法返回了一个特殊 类型 ,在调用时同样会报错----这个错误发生在服务端已经增加了相应的返回类型的方法,但客户端没有更新时。

文中提及内容在XP,.net4下开发。高版本是否已经修正不得而知。

最后补充一 点:微软真的太2了!!!更新太快了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值