WCF RIA SERVICE如何返回自定义类型(非Entity)

用WCF Ria Service如何返回一个非Entity实体的自定义类型呢?其实很简单,就是用WCF的方式定义可序列化的类型即可。方法:在SilverlightApplication1.Web项目添加一个空的Domain Service,名字叫MyService,里面加一个写一个Invoke的方法。注意这个DomainService需要加[Invoke]属性标明这不是一个Entity相关的操作,也不是Query,Insert,Update,Delete。详细解释请参考MSDN这个页面

[Invoke]的方法可以返回任何类型,我们这里就让它返回非Entity的自定义的类型好了。首先:

顶一个自定义类型
复制代码
   
   
1 [DataContract] 2 public class MyTestClass 3 { 4 [DataMember] 5 public string [] MyList{ get ; set ; } 6 7 [DataMember] 8 public int MyData { get ; set ; } 9 }
复制代码

然后:

写一个DomainService
复制代码
   
   
1 [EnableClientAccess()] 2 public class MyAppService : DomainService 3 { 4 [Invoke] 5 public MyTestClass Test( string a, string b) 6 { 7 // TODO: .... 8 return new MyTestClass(); // 返回自定义类型 9 } 10 11 protected override void OnError(DomainServiceErrorInfo errorInfo) 12 { 13 base .OnError(errorInfo); 14 15 Logger.LogException(errorInfo.Error.Message, errorInfo.Error.StackTrace); 16 } 17 }
复制代码

编译之后,在RiaService对应的前台Silverlight项目(具体可以查看project的属性,有WCF Ria Service Link),可以看到隐藏的文件:Generated_Code\*.web.g.cs。里面自动生成了WCF的本地代理和本地类型。然后在Silverlight里面可以这样调用:

*.xaml.cs
复制代码
   
   
1 MyTestContext ctx = new MyTestContext(); 2 3 ctx.Test( " a " , " b " , invokeOperation => 4 { 5 if (invokeOperation.HasError) 6 { 7 this .label1.text = invokeOperation.Error.Message; 8 } 9 else 10 { 11 MyTestClass result = invokeOperation.Value; // 得到自定义的类型的结果 12 // TODO:..... 13 } 14 }, null );
复制代码

发布并部署到IIS也没有问题,只要加.xap和.xaml两个MIME类型就行了,很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值