none
关于此“客户端代理类的生成方法”的疑问 RRS feed

  • 问题

  • private void Application_Startup(object sender, StartupEventArgs e)
            {
                #region
                Uri uri = new Uri(GetURL() + "/Config.xml", UriKind.Absolute);
                WebClient Appclient = new WebClient();
                Appclient.OpenReadAsync(uri);
                Appclient.OpenReadCompleted += new OpenReadCompletedEventHandler(Appclient_OpenReadCompleted);
                #endregion
            }
            void Appclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                Stream stream = e.Result;
                using (XmlReader xReader = XmlReader.Create(stream))
                {
                    xReader.ReadToFollowing("TestData");
                    string TestData = xReader.ReadElementContentAsString();
                    MessageBox.Show(TestData);
                    xReader.ReadToNextSibling("SecData");
                    string SecData = xReader.ReadElementContentAsString();
                    InitializeServices(TestData);
                }
            }
            public void InitializeServices(string serviceAddress)
            {
                BasicHttpBinding basicBinding = new BasicHttpBinding();
                basicBinding.MaxBufferSize = 2147483647;
                basicBinding.MaxReceivedMessageSize = 2147483647;
                CustomBinding binding = new CustomBinding(basicBinding);

                BindingElement binaryElement = new BinaryMessageEncodingBindingElement();

                EndpointAddress endPoint = new EndpointAddress(serviceAddress);

                WebServiceSoapClient _LBControl = new WebServiceSoapClient();
                _LBControl = (WebServiceSoapClient)Activator.CreateInstance(typeof(WebServiceSoapClient), binding, endPoint);
                _LBControl.HelloWorldAsync();
                _LBControl.HelloWorldCompleted += new EventHandler<HelloWorldCompletedEventArgs>(_LBControl_HelloWorldCompleted);
            }

            void _LBControl_HelloWorldCompleted(object sender, HelloWorldCompletedEventArgs e)
            {
                MessageBox.Show(e.Result);
            }

    实现思路:

           1、在服务端配置“XML”文件,其中配置了WebService地址,方便维护。不用在现场打开“XAP”包,修改“WebService”地址。

           2、通过反射创建“客户端代理类”。

           3、将代理类的创建方法写在“.xaml.cs”文件中,使整个“Silverlight”中的所有页面都可以使用。

    问题:

    1、只要在服务端的“XML”文件中配置服务地址,然后在客户端“获取XML的中服务地址”,实例化客户端代理类,不就行吗了?
    为什么还要通过反射来生成客户端代理类?这样创建不更加简单吗?
    如下创建:
    WebServiceSoapClient _LBControl = new WebServiceSoapClient("WebServiceSoap", serviceAddress);

    2、通过反射生成客户端代理类的原理是什么呢?

    3、_LBControl = (WebServiceSoapClient)Activator.CreateInstance(typeof(WebServiceSoapClient), binding, endPoint);
    设置“ABC”,创建客户端代理对象???

    4、在“App.xaml.cs”中创建客户端代理实例,创建之后,在其它“UserControl”页面里也不能访问啊。比如,实例中的“_LBControl”客户端代理对象。怎么让它可以在项目中的任何“XAML.cs”文件中都能访问呢???

         


    Science and technology is my lover.

    2012年7月24日 3:55

答案