2011-03-25 150 views
0

我有一个带有wcf ria服务的Silverlight站点,这只是一个测试。 服务是遵循wcf ria服务方法返回

[EnableClientAccess()] 
    public class PersonService : DomainService 
    { 
     [Invoke] 
     public string[] GetPersonNames() 
     { 
      return new string[] { "abc", "cba", "ddd", "ttt" }; 
     } 

     [Invoke] 
     public string GetName() 
     { 
      return "teste"; 
     } 

     [Invoke] 
     public string Test(string str) 
     { 
      return str; 
     } 
    } 

我有一个XAML页面,在这里我所说的服务

SLRiaTest.Web.PersonContext person = new SLRiaTest.Web.PersonContext(); 

     public MainPage() 
     { 
      InitializeComponent(); 

      person.GetPersonNames(OnFinished,null); 
     } 

     private void OnFinished(InvokeOperation<string[]> obj) 
     { 
      var list = obj.Value; 

     } 

但价值总是空和破发点,我有在贡献莫过于从来没有被击中。我搜索互联网高低,找不到任何可能告诉我我做错了什么,任何帮助都会很棒,我绝望......我想我可以使用RIA服务而不需要实体框架?

回答

1

在RIA服务中,通过线路进行呼叫有什么和不起作用的细节很复杂。如果你想对这里发生的事情有一个详细的回答,你可能会有更好的运气询问RIA Services forum

然而,你有点违背RIA服务的设计。如果你想返回一个对象集合,你应该使用Query而不是Invoke。

[EnableClientAccess()] 
public class PersonService : DomainService 
{ 
    [Query] 
    public IEnumerable<string> GetPersonNames() 
    { 
     return new string[] { "abc", "cba", "ddd", "ttt" }; 
    } 
} 

... 

    public MainPage() 
    { 
     InitializeComponent(); 

     person.Load(person.GetPersonNamesQuery(), OnFinished, null); 
    } 

    private void OnFinished(LoadOperation<IEnumerable<string>> obj) 
    { 
     var list = obj.Value; 
    } 

我刚刚那样做了我的头顶,所以可能会有一些小错误。但这是一般的想法。

+0

您好,感谢您的答复,我已经尝试过解决方案,我得到这个错误“类型‘字符串’不是有效的实体类型。实体类型不能是原始类型或简单类型,如字符串或Guid“ – 2011-03-25 17:32:08

+0

感谢您的链接 – 2011-03-25 17:33:13

+0

我的不好。我有一段时间没有完成RIA服务(说实话,我真的不想错过:)),但论坛非常活跃,你一定会在那里得到很好的帮助。 – 2011-03-25 18:15:15

0

我有一个你正在尝试的工作例子。您不需要更改您的域名服务。确保已经安装了Visual Studio 2001 SP1,它也将WCF RIA更新到SP1。

在您的Silverlight页面,您可以拨打您的域名服务如下:

public partial class MainPage : UserControl 
    { 
     private PersonContext _ctx = new PersonContext(); 

     public MainPage() 
     { 
      InitializeComponent(); 
      Loaded += new RoutedEventHandler(MainPage_Loaded); 
     } 

     private void MainPage_Loaded (object sender, RoutedEventArgs e) 
     { 
      _ctx.GetPersonNames((op) => 
       { 
        if (!op.HasError) 
        { 
         // The data here is your String[] 
         var data = op.Value; 
        } 
       }, null); 
     } 
    } 
+0

嗨,谢谢你的提示,视觉工作室已经当我测试网站时升级到SP1 – 2011-03-28 16:31:27