2011-03-25 143 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