В веб-сервисе отсутствуют методы при вызове из Silverlight - PullRequest
1 голос
/ 08 февраля 2010

Я создал веб-сервис WCF, развернул его и отладил. Я написал консольное приложение, сослался на веб-сервис, и все работает.

Теперь я пытаюсь использовать веб-сервис в приложении silverlight 3. Я добавил следующий код в событие щелчка.

TagServiceClient client = new TagServiceClient();
Tag[] tags = client.GetTags();
client.Close();

VS сообщает, что не может найти методы GetTags () и Close (). Но у VS нет проблем с этими методами в консольном приложении.

Я добавил оператор использования для служебной ссылки в начало моего файла.

Я поместил файл clientaccesspolicy.xml в корневой домен и в папку, содержащую веб-сервис. Кажется, ничего не меняется независимо от того, где оно находится.

Что происходит? Какие-либо предложения? Я впервые использую веб-сервис в Silverlight, поэтому я могу что-то упустить.

1 Ответ

2 голосов
/ 08 февраля 2010

Вам потребуется сгенерировать новый клиентский прокси для использования в приложении Silverlight - IOW, из приложения Silverlight добавьте новую ссылку на службу и укажите ее для службы.

Затем вы увидите, что все немного по-другому - вы обнаружите, что в прокси есть асинхронные методы, а не синхронные, которые вы видели в прокси, созданном для консольного приложения. Так что в приложении silverlight ваш код будет выглядеть примерно так:

client.GetTagsCompleted += [my event handler];
client.GetTagsAsync();

и в вашем обработчике событий:

if (e.Error == null)
    if (!e.Cancelled)
        List<Tag> tags = new List<Tag>(e.result);

Когда вы добавляете сервисную ссылку в приложение silverlight, убедитесь, что вы разбираетесь с дополнительными настройками, потому что вы можете изменить тип коллекции, в которой возвращаются элементы, и т. Д. (Коллекция возврата по умолчанию - ObservableCollection<T>).

Если вы хотите избежать такого рода вещей (разные прокси для разных приложений или модулей), рассмотрите возможность использования svcutil для генерации прокси вместо того, чтобы позволить VS делать это (VS не использует svcutil).

...