[索引页]
[源码下载]


稳扎稳打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
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接using System;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Linq;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Runtime.Serialization;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.ServiceModel;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.ServiceModel.Activation;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Collections.Generic;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Text;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
namespace Silverlight30.Service

Web.config
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接<system.serviceModel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<bindings>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<customBinding>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<binding name="customBinding0">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                
<binaryMessageEncoding />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                
<httpTransport />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
</binding>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</customBinding>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</bindings>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<behaviors>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<serviceBehaviors>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<behavior name="Silverlight30.Service.BinaryXmlServiceBehavior">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                
<serviceMetadata httpGetEnabled="true" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                
<serviceDebug includeExceptionDetailInFaults="false" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
</behavior>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</serviceBehaviors>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</behaviors>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<services>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<service behaviorConfiguration="Silverlight30.Service.BinaryXmlServiceBehavior"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            name
="Silverlight30.Service.BinaryXmlService">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<endpoint address="" binding="customBinding" bindingConfiguration="customBinding0"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                contract
="Silverlight30.Service.BinaryXmlService" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</service>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</services>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</system.serviceModel>

客户端
BinaryXml.xaml
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接<navigation:Page x:Class="Silverlight30.Communication.BinaryXml" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           mc:Ignorable
="d"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           d:DesignWidth
="640" d:DesignHeight="480"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           Title
="BinaryXml Page">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<Grid x:Name="LayoutRoot">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<StackPanel Orientation="Horizontal" Height="30">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<!--支持二进制 XML 通信-->
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<TextBox x:Name="txtName" Text="webabcd" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<Button x:Name="btnHelloConfig" Content="引用服务后(使用代理),通过配置的方式与服务端做二进制XML通信" Click="btnHelloConfig_Click" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<Button x:Name="btnHelloCoding" Content="引用服务后(使用代理),通过编程的方式与服务端做二进制XML通信" Click="btnHelloCoding_Click" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</StackPanel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</Grid>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</navigation:Page>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接

BinaryXml.xaml.cs
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接using System;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Collections.Generic;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Linq;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Net;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Controls;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Documents;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Input;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Media;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Media.Animation;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Shapes;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Navigation;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using Silverlight30.BinaryXmlService;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.ServiceModel.Channels;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.ServiceModel;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
namespace Silverlight30.Communication

ServiceReferences.ClientConfig
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接<configuration>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<system.serviceModel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<bindings>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<customBinding>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                
<binding name="CustomBinding_BinaryXmlService">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                    
<binaryMessageEncoding />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                    
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                
</binding>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
</customBinding>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</bindings>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<client>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<endpoint address="http://localhost:8616/BinaryXmlService.svc"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                binding
="customBinding" bindingConfiguration="CustomBinding_BinaryXmlService"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接                contract
="BinaryXmlService.BinaryXmlService" name="CustomBinding_BinaryXmlService" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</client>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</system.serviceModel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</configuration>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接


2、本地连接的演示
Silverlight 程序 1
LocalConnection.xaml
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接<navigation:Page x:Class="Silverlight30.Communication.LocalConnection" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           mc:Ignorable
="d"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           d:DesignWidth
="640" d:DesignHeight="480"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接           Title
="LocalConnection Page">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<Grid x:Name="LayoutRoot">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<StackPanel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<!--结合 Silverlight30.LocalConnection/MainPage.xaml 中的项目演示 Silverlight 对本地连接的支持-->
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<TextBlock Text="我是 abc" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<Button x:Name="btnSubmit" Content="提交" Click="btnSubmit_Click" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<TextBlock x:Name="lblResult" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</StackPanel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</Grid>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</navigation:Page>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接

LocalConnection.xaml.cs

Silverlight 程序 2
Silverlight30.LocalConnection/MainPage.xaml
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接<UserControl x:Class="Silverlight30.LocalConnection.MainPage"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    mc:Ignorable
="d" d:DesignWidth="640" d:DesignHeight="480">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<Grid x:Name="LayoutRoot">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<StackPanel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<!--结合 Silverlight30/Communication/LocalConnection.xaml 中的项目演示 Silverlight 对本地连接的支持-->
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<TextBlock Text="我是 xyz" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<Button x:Name="btnSubmit" Content="提交" Click="btnSubmit_Click" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
<TextBlock x:Name="lblResult" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
</StackPanel>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</Grid>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</UserControl>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接

Silverlight30.LocalConnection/MainPage.xaml.cs
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接using System;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Collections.Generic;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Linq;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Net;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Controls;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Documents;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Input;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Media;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Media.Animation;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Shapes;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
using System.Windows.Messaging;
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
namespace Silverlight30.LocalConnection

以上两个 Silverlight 程序间可以进行本地通信
Silverlight30.LocalConnectionTestPage.html
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    height
="100%" style="float: left; width: 50%">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="source" value="ClientBin/Silverlight30.xap" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="onError" value="onSilverlightError" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="background" value="white" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="minRuntimeVersion" value="3.0.40624.0" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="autoUpgrade" value="true" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration: none">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            style
="border-style: none" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</a>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</object>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    height
="100%" style="float: left; width: 50%">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="source" value="ClientBin/Silverlight30.LocalConnection.xap" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="onError" value="onSilverlightError" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="background" value="white" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="minRuntimeVersion" value="3.0.40624.0" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<param name="autoUpgrade" value="true" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
<href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration: none">
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接        
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接            style
="border-style: none" />
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接    
</a>
稳扎稳打Silverlight(39) - 3.0通信之二进制XML通信, 本地连接
</object>


OK
[源码下载]

相关文章: