Как привязать элемент управления WPF к методу WCF с помощью ObjectDataProvider - PullRequest
1 голос
/ 05 мая 2009

Я впервые тестирую WPF и пытаюсь вызвать службу WCF с ObjectDataProvider.

Служба WCF с именем WcfService1 с одним методом:

namespace WcfService1
{
    public class Service1 : IService1
    {

        public String HelloWorld()
        {
            return "Hello World!";
        }
    }
}

Я добавил ссылку на службу в мой проект WPF и назвал ее TestService

В моем главном окне я могу вызвать это без проблем в коде позади. Это кажется простым; как вызов веб-службы:

TestService.Service1Client service = new 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 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: сбой при попытке вызвать метод для типа;

ObjectDataProvider не может вызвать метод HelloWorld с типом IService1 (используя метод и тип из моего примера). Есть идеи почему?

1 Ответ

1 голос
/ 05 мая 2009

Вам необходимо импортировать пространство имен службы через директиву 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...