我有一个带有wcf ria服务的Silverlight站点,这只是一个测试。 该服务如下
[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;
}
但是Value总是为null,而我在serice中的断点永远不会被击中。我搜索互联网的高低,找不到任何可能告诉我我做错的事情,任何帮助都会很棒,我很绝望......我想我可以在没有实体框架的情况下使用RIA服务?
答案 0 :(得分: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;
}
我刚刚做到了这一点,所以可能会有一些小错误。但这是一般的想法。
答案 1 :(得分: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 );
}
}