wcf риа сервис возврат метода - PullRequest
0 голосов
/ 25 марта 2011

У меня есть сайт 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;

        }

но значение всегда равно нулю, и точка останова, которая у меня есть в serice, никогда не будет достигнута. Я ищу в Интернете все выше и ниже и не могу найти ничего, что могло бы сказать мне, что я делаю неправильно, любая помощь была бы отличной, я в отчаянии .... Я полагаю, что я могу использовать службу RIA без права структуры лица

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Подробная информация о том, что работает и не работает для вызовов по проводам в RIA Services, сложна. Если вы хотите получить подробный ответ о том, что здесь происходит, вам будет лучше задать вопрос на форуме RIA Services

Тем не менее, вы как бы идете против дизайна RIA Services. Если вы хотите вернуть коллекцию объектов, вы должны использовать 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 голосов
/ 26 марта 2011

У меня есть рабочий пример того, что вы пытаетесь. Вам не нужно менять службу домена. Убедитесь, что вы установили Visual Studio 2001 SP1, который также обновляет RIA WCF до 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 );
        }
    }
...