Как привязать элемент управления WPF к методу WCF с помощью ObjectDataProvider

StackOverflow https://stackoverflow.com/questions/822015

  •  03-07-2019
  •  | 
  •  

Вопрос

Я впервые тестирую 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top