Como vincular um controle WPF a um método WCF usando um ObjectDataProvider
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?
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>