كيفية ربط 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.عرض(الخدمة.HelloWorld());
أحاول خلق ObjectDataProvider يشير إلى هذه الخدمة.أعتقد أنا في حيرة ما ObjectType ينبغي أن يكون ؟ لقد حاولت المحلية ، الخدمة مساحة الاسم ، src;أنا فقدت:
<Window.Resource>
<ObjectDataProvider
x:Key="odpTestService"
ObjectType="{x:Type **TestService**:Service1Client}"
MethodName="HelloWorld" />
</Window.Resources>
Ultimatly فإنه سيتم ربط إلى TextBlock:
<TextBlock Grid.Column="0" Grid.Row="0"
Grid.ColumnSpan="2" Background="AliceBlue"
Text="{Binding Source={StaticResource odpTestService}}" />
كنت أحاول أن العمل من فليكر سبيل المثال نشرها هنا: http://khason.net/blog/wpf-binding-to-wcf-and-more/
تحديث: الجواب من دينيس هل في حل جزء من المشكلة هنا.الآن أنا الحصول على خطأ في التحويل البرمجي:النظام.يقوم نظام ويندوز.خطأ في البيانات:34 :ObjectDataProvider:فشل محاولة استدعاء الأسلوب على نوع ؛
على 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>