كيفية ربط 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.عرض(الخدمة.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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top