Pergunta

Eu estou testando WPF pela primeira vez e eu estou tentando chamar um serviço WCF com um ObjectDataProvider.

serviço WCF chamado WcfService1 com um único método:

namespace WcfService1
{
    public class Service1 : IService1
    {

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

Eu adicionei uma referência de serviço para o meu projeto WPF e nomeou-TestService

Na minha janela principal, eu posso chamar isso sem problema por trás de código. Parece simples; como uma chamada de serviço web:

serviço TestService.Service1Client = new TestService.Service1Client (); MessageBox.Show (service.HelloWorld ());

Eu estou tentando criar um ObjectDataProvider que aponta para este serviço. Acho que estou confuso quanto ao que o ObjectType deve ser? Eu tentei local, o namespace de serviço, src; Eu estou perdido:

<Window.Resource>
    <ObjectDataProvider 
        x:Key="odpTestService" 
        ObjectType="{x:Type **TestService**:Service1Client}" 
        MethodName="HelloWorld" />
</Window.Resources>

ultimatly que vai ligar a um TextBlock:

<TextBlock Grid.Column="0" Grid.Row="0" 
Grid.ColumnSpan="2" Background="AliceBlue"
Text="{Binding Source={StaticResource odpTestService}}" />

Eu estava tentando trabalhar a partir do exemplo Flickr postado aqui: http://khason.net/blog/wpf-binding-to-wcf-and-more/

Update: A resposta de Denis fez resolver parte do problema aqui. Agora, eu estou recebendo um erro de compilação: System.Windows.Data de erro: 34: ObjectDataProvider: Falha tentando invocar o método do tipo;

O ObjectDataProvider não pode invocar o método HelloWorld com o tipo IService1 (usando o método e o tipo do meu exemplo). Alguma idéia por que?

Foi útil?

Solução

Você precisa importar namespace do serviço através de um xmlns diretiva na parte superior do arquivo:

Assumindo que a referência tenha sido adicionado diretamente para a sua aplicação, e que namespace raiz do seu aplicativo é "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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top