很多时候我们可能十分希望自定义一些方法可以让sl端直接调用,对SOA的设计思想,这个是十分有作用的,因为一个函数就完成一个功能,这是SOA最常见不过的设计。这里我将讲述一下.net ria services在sl应用中如何自定义函数.
1.在.net ria service端先定义一个方法,并返回一个自定义的类,这个类必须有主键,可以通过“[Key]”标识一个字段为主键。并把此函数用“[ServiceOperation]”标识,这样sliverlgiht端才会出来这个函数。
1: [EnableClientAccess()]2: public class myDomainService : DomainService
3: { 4: [ServiceOperation]5: public myclass myText(string userId)
6: {7: myclass mc = new myclass();
8: mc.userid = userId; 9: mc.input = userId;10: return mc;
11: }12: }13: 14: public class myclass
15: {16: [Key]17: public string userid { get; set; }
18: public string input { get; set; }
19: }2.调用相当简单,以下是silverlight端的调用代码
1: public Home()
2: { 3: InitializeComponent();4: Business.Web.Services.myDomainContext md = new Business.Web.Services.myDomainContext();
5: var c = md.myText("FunSL.com");
6: c.Completed += new EventHandler(c_Completed);
7: } 8: 9: void c_Completed(object sender, EventArgs e)
10: {11: var b = (System.Windows.Ria.Data.InvokeOperation<Business.Web.Services.myclass>)sender;
12: Business.Web.Services.myclass mc = (Business.Web.Services.myclass)b.Value;13: MessageBox.Show(mc.userid + ";" + mc.input);
14: }欢迎您参与更多关于此话题的讨论,本文原创地址为:http://funsl.com
评论
你好,我是第一次在项目中使用ria services,现在遇到了一个问题:我用的是VS2008+ria services,在自定义函数时,我从数据库中取出某张表的数据,然后返回list,这张表中有19万条数据,我取前8000条时可以正常返回,没有问题,但是如果超过8000条记录时,就会返回一个“错误: Silverlight 应用程序中未处理的错误
代码: 4004
类别: ManagedRuntimeError
消息: System.Windows.Ria.DomainOperationException: Load operation failed for query 'Getwarehouselist'. 远程服务器返回了错误: NotFound。“ 这种错误。
奇怪的是,如果我换另一张表查询,(这张表有1万多条记录)就一切正常。实在搞不懂了,应该也不是ria services字节长度的限制的问题。
请帮忙分析一下,是什么原因呢?如果需要,我把源码给你。
谢谢
还是有可能是因为ria serivces的限制的,因为ria service是基本wcf,而wcf对最大序列化数据是以byte大小来定义的,所以还有一种可能是你8k条记录的byte大小已经超过另一个表的1w条记录的大小,所以导致这样的情况。
哦,那有没有方法可以改变这个序列化数据的大小限制呢?
另外,通过返回值来看,大小并没有超出另一张表1W的大小,但是还是会报这个错误。
我是通过(string.length来取得大小的),不知这样对不对?
谢谢。
微软推荐的做法是不要一次反回所有数据。你可以利用linq的take或如果你使用的是domaindatasource的话更是可以设置pagesize,这样反正你是一定要分页的,所以没有必要一次过读取所有的数据,这样不单可以减轻服务端的负担还不用客户端缓存过多数据。