[索引页]
[源码下载]

稳扎稳打Silverlight(39) – 3.0通信的二向前制XML通信, 本地连接

作者:webabcd

介绍
Silverlight 3.0 通信的初长效益

  • 亚上前制XML通信 – 与 WCF 服务中间通信,可以运用二前进制 XML
    传递数据(提高传输性能) 
  • 本地连接 – 允许客户端的点滴个 Silverlight
    程序中直接进行通信(不用通过服务端)

在线DEMO
http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html

示例
1、以第二上前制 XML 传递数据的言传身教
服务端(WCF)
BinaryXmlService.svc

图片 1using System;
图片 2using System.Linq;
图片 3using System.Runtime.Serialization;
图片 4using System.ServiceModel;
图片 5using System.ServiceModel.Activation;
图片 6using System.Collections.Generic;
图片 7using System.Text;
图片 8
图片 9namespace Silverlight30.Service
图片 10图片 11图片 12{
图片 13图片 14    /**//// <summary>
图片 15    /// 一个简单易行的 WCF 服务
图片 16    /// </summary>
图片 17    [ServiceContract]
图片 18    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
图片 19    public class BinaryXmlService
图片 20图片 21    图片 22{
图片 23        [OperationContract]
图片 24        public string Hello(string name)
图片 25图片 26        图片 27{
图片 28            return “Hello: ” + name;
图片 29        }
图片 30    }
图片 31}
图片 32

Web.config

图片 33<system.serviceModel>
图片 34    <bindings>
图片 35        <customBinding>
图片 36            <binding name=”customBinding0″>
图片 37                <binaryMessageEncoding />
图片 38                <httpTransport />
图片 39            </binding>
图片 40        </customBinding>
图片 41    </bindings>
图片 42    <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
图片 43    <behaviors>
图片 44        <serviceBehaviors>
图片 45            <behavior name=”Silverlight30.Service.BinaryXmlServiceBehavior”>
图片 46                <serviceMetadata httpGetEnabled=”true” />
图片 47                <serviceDebug includeExceptionDetailInFaults=”false” />
图片 48            </behavior>
图片 49        </serviceBehaviors>
图片 50    </behaviors>
图片 51    <services>
图片 52        <service behaviorConfiguration=”Silverlight30.Service.BinaryXmlServiceBehavior”
图片 53            name=”Silverlight30.Service.BinaryXmlService”>
图片 54            <endpoint address=”” binding=”customBinding” bindingConfiguration=”customBinding0″
图片 55                contract=”Silverlight30.Service.BinaryXmlService” />
图片 56            <endpoint address=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange” />
图片 57        </service>
图片 58    </services>
图片 59</system.serviceModel>

客户端
BinaryXml.xaml

图片 60<navigation:Page x:Class=”Silverlight30.Communication.BinaryXml” 
图片 61           xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
图片 62           xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” 
图片 63           xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
图片 64           xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
图片 65           mc:Ignorable=”d”
图片 66           xmlns:navigation=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation”
图片 67           d:DesignWidth=”640″ d:DesignHeight=”480″
图片 68           Title=”BinaryXml Page”>
图片 69    <Grid x:Name=”LayoutRoot”>
图片 70        <StackPanel Orientation=”Horizontal” Height=”30″>
图片 71        
图片 72            <!–支持二进制 XML 通信–>
图片 73        
图片 74            <TextBox x:Name=”txtName” Text=”webabcd” />
图片 75            <Button x:Name=”btnHelloConfig” Content=”引用服务后(使用代理),通过部署的点子和劳动端做二进制XML通信” Click=”btnHelloConfig_Click” />
图片 76            <Button x:Name=”btnHelloCoding” Content=”引用服务后(使用代理),通过编程的法以及劳动端做二上前制XML通信” Click=”btnHelloCoding_Click” />
图片 77        
图片 78        </StackPanel>
图片 79    </Grid>
图片 80</navigation:Page>
图片 81

BinaryXml.xaml.cs

图片 82using System;
图片 83using System.Collections.Generic;
图片 84using System.Linq;
图片 85using System.Net;
图片 86using System.Windows;
图片 87using System.Windows.Controls;
图片 88using System.Windows.Documents;
图片 89using System.Windows.Input;
图片 90using System.Windows.Media;
图片 91using System.Windows.Media.Animation;
图片 92using System.Windows.Shapes;
图片 93using System.Windows.Navigation;
图片 94
图片 95using Silverlight30.BinaryXmlService;
图片 96using System.ServiceModel.Channels;
图片 97using System.ServiceModel;
图片 98
图片 99namespace Silverlight30.Communication
图片 100图片 101图片 102{
图片 103    public partial class BinaryXml : Page
图片 104图片 105    图片 106{
图片 107        public BinaryXml()
图片 108图片 109        图片 110{
图片 111            InitializeComponent();
图片 112        }
图片 113
图片 114        void client_HelloCompleted(object sender, HelloCompletedEventArgs e)
图片 115图片 116        图片 117{
图片 118            if (e.Error == null)
图片 119                MessageBox.Show(e.Result);
图片 120            else
图片 121                MessageBox.Show(e.Error.ToString());
图片 122        }
图片 123
图片 124        private void btnHelloConfig_Click(object sender, RoutedEventArgs e)
图片 125图片 126        图片 127{
图片 128            // 通过安排文件(ServiceReferences.ClientConfig)的艺术调用以第二向前制 XML 通信的 WCF 服务(需要利用代理)
图片 129            BinaryXmlServiceClient client = new BinaryXmlServiceClient();
图片 130            client.HelloCompleted += new EventHandler<HelloCompletedEventArgs>(client_HelloCompleted);
图片 131            client.HelloAsync(txtName.Text);
图片 132        }
图片 133
图片 134        private void btnHelloCoding_Click(object sender, RoutedEventArgs e)
图片 135图片 136        图片 137{
图片 138            // 通过编程的法子调用以老二前进制 XML 通信的 WCF 服务(需要用代理)
图片 139            BinaryMessageEncodingBindingElement binary = new BinaryMessageEncodingBindingElement();
图片 140            HttpTransportBindingElement transport = new HttpTransportBindingElement();
图片 141            CustomBinding binding = new CustomBinding(binary, transport);
图片 142            EndpointAddress address = new EndpointAddress(“http://localhost:8616/BinaryXmlService.svc”);
图片 143            BinaryXmlServiceClient client = new BinaryXmlServiceClient(binding, address);
图片 144            client.HelloCompleted += new EventHandler<HelloCompletedEventArgs>(client_HelloCompleted);
图片 145            client.HelloAsync(txtName.Text);
图片 146        }
图片 147    }
图片 148}
图片 149

ServiceReferences.ClientConfig

图片 150<configuration>
图片 151    <system.serviceModel>
图片 152        <bindings>
图片 153            <customBinding>
图片 154                <binding name=”CustomBinding_BinaryXmlService”>
图片 155                    <binaryMessageEncoding />
图片 156                    <httpTransport maxReceivedMessageSize=”2147483647″ maxBufferSize=”2147483647″ />
图片 157                </binding>
图片 158            </customBinding>
图片 159        </bindings>
图片 160        <client>
图片 161            <endpoint address=”http://localhost:8616/BinaryXmlService.svc”
图片 162                binding=”customBinding” bindingConfiguration=”CustomBinding_BinaryXmlService”
图片 163                contract=”BinaryXmlService.BinaryXmlService” name=”CustomBinding_BinaryXmlService” />
图片 164        </client>
图片 165    </system.serviceModel>
图片 166</configuration>
图片 167

2、本地连接的言传身教
Silverlight 程序 1
LocalConnection.xaml

图片 168<navigation:Page x:Class=”Silverlight30.Communication.LocalConnection” 
图片 169           xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
图片 170           xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” 
图片 171           xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
图片 172           xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
图片 173           mc:Ignorable=”d”
图片 174           xmlns:navigation=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation”
图片 175           d:DesignWidth=”640″ d:DesignHeight=”480″
图片 176           Title=”LocalConnection Page”>
图片 177    <Grid x:Name=”LayoutRoot”>
图片 178        <StackPanel>
图片 179        
图片 180            <!–结合 Silverlight30.LocalConnection/MainPage.xaml 中之类型示范 Silverlight 对本地连接的支持–>
图片 181        
图片 182            <TextBlock Text=”我是 abc” />
图片 183            <Button x:Name=”btnSubmit” Content=”提交” Click=”btnSubmit_Click” />
图片 184            <TextBlock x:Name=”lblResult” />
图片 185            
图片 186        </StackPanel>
图片 187    </Grid>
图片 188</navigation:Page>
图片 189

LocalConnection.xaml.cs

图片 190图片 191/**//*
图片 192 * LocalMessageReceiver – 本地连接接收器
图片 193 *     ReceiverName – 接收器的名号。与任何一个 Silverlight 程序所装的发送器的接收器名称相对应
图片 194 *     AllowedSenderDomains – 信任的发送器所属域名列表
图片 195 *     DisableSenderTrustCheck – 是否不睬 Vista 下之 IE 7 的保护模式。默认值为 false
图片 196 *     NameScope – 接收器名称是于同域唯一尚是于全域唯一(ReceiverNameScope.Domain 同域唯一,默认值;ReceiverNameScope.Global 全域唯一)
图片 197 *     Listen() – 开始监听发送过来的信
图片 198 *     MessageReceived事件 – 接收好事件
图片 199 *     
图片 200 * LocalMessageSender – 本地连接发送器
图片 201 *     ReceiverName – 接收器的名目。与另外一个 Silverlight 程序所设置的接收器的接收器名称相对应
图片 202 *     ReceiverDomain – 将要发送到的接收器所属域名
图片 203 *     SendAsync(string message, object userState) – 异步发送数据。(参数1:需要发送的消息;参数2:上下文,可以传递给发送完事件)
图片 204 *     SendCompleted事件 – 发送完事件
图片 205 */
图片 206
图片 207using System;
图片 208using System.Collections.Generic;
图片 209using System.Linq;
图片 210using System.Net;
图片 211using System.Windows;
图片 212using System.Windows.Controls;
图片 213using System.Windows.Documents;
图片 214using System.Windows.Input;
图片 215using System.Windows.Media;
图片 216using System.Windows.Media.Animation;
图片 217using System.Windows.Shapes;
图片 218using System.Windows.Navigation;
图片 219using System.Windows.Messaging;
图片 220
图片 221namespace Silverlight30.Communication
图片 222图片 223图片 224{
图片 225    public partial class LocalConnection : Page
图片 226图片 227    图片 228{
图片 229        LocalMessageSender _sender;
图片 230
图片 231        public LocalConnection()
图片 232图片 233        图片 234{
图片 235            InitializeComponent();
图片 236
图片 237            this.Loaded += new RoutedEventHandler(LocalConnection_Loaded);
图片 238        }
图片 239
图片 240        void LocalConnection_Loaded(object sender, RoutedEventArgs e)
图片 241图片 242        图片 243{
图片 244            _sender = new LocalMessageSender(“abc”);
图片 245
图片 246            LocalMessageReceiver receiver = new LocalMessageReceiver(“xyz”);
图片 247            receiver.MessageReceived += new EventHandler<MessageReceivedEventArgs>(receiver_MessageReceived);
图片 248            receiver.Listen();            
图片 249        }
图片 250
图片 251        void receiver_MessageReceived(object sender, MessageReceivedEventArgs e)
图片 252图片 253        图片 254{
图片 255            lblResult.Text += e.Message + “\r\n”;
图片 256        }
图片 257
图片 258        private void btnSubmit_Click(object sender, RoutedEventArgs e)
图片 259图片 260        图片 261{
图片 262            _sender.SendAsync(“在 abc 单击了按钮”);
图片 263        }
图片 264    }
图片 265}
图片 266

Silverlight 程序 2
Silverlight30.LocalConnection/MainPage.xaml

图片 267<UserControl x:Class=”Silverlight30.LocalConnection.MainPage”
图片 268    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
图片 269    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
图片 270    xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″ xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″ 
图片 271    mc:Ignorable=”d” d:DesignWidth=”640″ d:DesignHeight=”480″>
图片 272    <Grid x:Name=”LayoutRoot”>
图片 273        <StackPanel>
图片 274        
图片 275            <!–结合 Silverlight30/Communication/LocalConnection.xaml 中的色示范 Silverlight 对本地连接的支撑–>
图片 276        
图片 277            <TextBlock Text=”我是 xyz” />
图片 278            <Button x:Name=”btnSubmit” Content=”提交” Click=”btnSubmit_Click” />
图片 279            <TextBlock x:Name=”lblResult” />
图片 280            
图片 281        </StackPanel>
图片 282    </Grid>
图片 283</UserControl>
图片 284

Silverlight30.LocalConnection/MainPage.xaml.cs

图片 285using System;
图片 286using System.Collections.Generic;
图片 287using System.Linq;
图片 288using System.Net;
图片 289using System.Windows;
图片 290using System.Windows.Controls;
图片 291using System.Windows.Documents;
图片 292using System.Windows.Input;
图片 293using System.Windows.Media;
图片 294using System.Windows.Media.Animation;
图片 295using System.Windows.Shapes;
图片 296
图片 297using System.Windows.Messaging;
图片 298
图片 299namespace Silverlight30.LocalConnection
图片 300图片 301图片 302{
图片 303    public partial class MainPage : UserControl
图片 304图片 305    图片 306{
图片 307        LocalMessageSender _sender;
图片 308
图片 309        public MainPage()
图片 310图片 311        图片 312{
图片 313            InitializeComponent();
图片 314
图片 315            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
图片 316        }
图片 317
图片 318        void MainPage_Loaded(object sender, RoutedEventArgs e)
图片 319图片 320        图片 321{
图片 322            _sender = new LocalMessageSender(“xyz”);
图片 323
图片 324            LocalMessageReceiver receiver = new LocalMessageReceiver(“abc”);
图片 325            receiver.MessageReceived += new EventHandler<MessageReceivedEventArgs>(receiver_MessageReceived);
图片 326            receiver.Listen();
图片 327        }
图片 328
图片 329        void receiver_MessageReceived(object sender, MessageReceivedEventArgs e)
图片 330图片 331        图片 332{
图片 333            lblResult.Text += e.Message + Environment.NewLine;
图片 334        }
图片 335
图片 336        private void btnSubmit_Click(object sender, RoutedEventArgs e)
图片 337图片 338        图片 339{
图片 340            _sender.SendAsync(“在 xyz 单击了按钮”);
图片 341        }
图片 342    }
图片 343}
图片 344

上述两个 Silverlight 程序间可以进行本地通信
Silverlight30.LocalConnectionTestPage.html

图片 345<object data=”data:application/x-silverlight-2,” type=”application/x-silverlight-2″
图片 346    height=”100%” style=”float: left; width: 50%”>
图片 347    <param name=”source” value=”ClientBin/Silverlight30.xap” />
图片 348    <param name=”onError” value=”onSilverlightError” />
图片 349    <param name=”background” value=”white” />
图片 350    <param name=”minRuntimeVersion” value=”3.0.40624.0″ />
图片 351    <param name=”autoUpgrade” value=”true” />
图片 352    <a href=”http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0″ style=”text-decoration: none”>
图片 353        <img src=”http://go.microsoft.com/fwlink/?LinkId=108181″ alt=”Get Microsoft Silverlight”
图片 354            style=”border-style: none” />
图片 355    </a>
图片 356</object>
图片 357<object data=”data:application/x-silverlight-2,” type=”application/x-silverlight-2″
图片 358    height=”100%” style=”float: left; width: 50%”>
图片 359    <param name=”source” value=”ClientBin/Silverlight30.LocalConnection.xap” />
图片 360    <param name=”onError” value=”onSilverlightError” />
图片 361    <param name=”background” value=”white” />
图片 362    <param name=”minRuntimeVersion” value=”3.0.40624.0″ />
图片 363    <param name=”autoUpgrade” value=”true” />
图片 364    <a href=”http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0″ style=”text-decoration: none”>
图片 365        <img src=”http://go.microsoft.com/fwlink/?LinkId=108181″ alt=”Get Microsoft Silverlight”
图片 366            style=”border-style: none” />
图片 367    </a>
图片 368</object>

OK
[源码下载]

相关文章

网站地图xml地图