Как привязать элемент управления WPF к методу WCF с помощью ObjectDataProvider
Вопрос
Я впервые тестирую WPF и пытаюсь вызвать службу WCF с помощью ObjectDataProvider.
Служба WCF с именем WcfService1 с одним методом:
namespace WcfService1
{
public class Service1 : IService1
{
public String HelloWorld()
{
return "Hello World!";
}
}
}
Я добавил ссылку на службу в свой проект WPF и назвал ее TestService.
В главном окне я могу без проблем вызвать это в коде.Это кажется простым;как вызов веб-службы:
Сервис TestService.Service1Client = новый TestService.Service1Client();MessageBox.Show(service.HelloWorld());
Я пытаюсь создать ObjectDataProvider, указывающий на эту службу.Наверное, я не понимаю, каким должен быть ObjectType?Я пробовал local, пространство имен службы, src;Я заблудился:
<Window.Resource>
<ObjectDataProvider
x:Key="odpTestService"
ObjectType="{x:Type **TestService**:Service1Client}"
MethodName="HelloWorld" />
</Window.Resources>
В конечном итоге он будет привязан к TextBlock:
<TextBlock Grid.Column="0" Grid.Row="0"
Grid.ColumnSpan="2" Background="AliceBlue"
Text="{Binding Source={StaticResource odpTestService}}" />
Я пытался работать с примером Flickr, размещенным здесь: http://khason.net/blog/wpf-binding-to-wcf-and-more/
Обновлять:Ответ Дениса решил часть проблемы.Теперь я получаю ошибку при компиляции:Ошибка System.Windows.Data:34 :ОбъектДанныеПровайдер:Сбой при попытке вызвать метод типа;
ObjectDataProvider не может вызвать метод HelloWorld с типом IService1 (используя метод и тип из моего примера).Есть идеи, почему?
Решение
Вам необходимо импортировать пространство имен службы с помощью директивы xmlns в верхней части файла:
Предполагая, что ссылка была добавлена непосредственно в ваше приложение и что корневым пространством имен вашего приложения является «MyApplication»:
<Window x:class="MyApplication.MyWindow"
xmlns:srv="MyApplication.TestService">
<Window.Resource>
<ObjectDataProvider
x:Key="odpTestService"
ObjectType="{x:Type srv:Service1Client}"
MethodName="HelloWorld" />
</Window.Resources>
<TextBlock Grid.Column="0" Grid.Row="0"
Grid.ColumnSpan="2" Background="AliceBlue"
Text="{Binding Source={StaticResource odpTestService}}" />
</Window>