介绍

Silverlight 2.0 调用 WCF 服务,对客户端与服务端传输的消息做加密    

    在 Visual Studio 2008 中使用"添加服务引用"会自动生成代理类。只支持BasicHttpBinding




示例

clientaccesspolicy.xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml<?xml version="1.0" encoding="utf-8" ?>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml<access-policy>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    <cross-domain-access>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml        <policy>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml            <allow-from http-request-headers="*">

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml                <domain uri="*" />

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml            </allow-from>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml            <grant-to>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml                <resource path="/" include-subpaths="true" />

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml            </grant-to>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml        </policy>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    </cross-domain-access>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml</access-policy>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml<!--

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlSystem.Net 命名空间 和 System.Net.Sockets 命名空间的跨域调用,需要在目标域的根目录下配置策略文件

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlImage 控件 和 MediaElement 控件所访问的跨域地址,不受策略文件的限制

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlHTTP 调用 仅支持 GET 和 POST ,只有 200(确定) 和 404(未找到) 状态代码可用

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml同域:同一子域、协议和端口。不符合以上任一条件则为跨域

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlSilverlight 与 HTTP/HTTPS 的所有通信均为异步

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml关于策略文件详见文档

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml-->


1、调用 WCF 服务

WCFService.cs(WCF 服务)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Linq;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Runtime.Serialization;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.ServiceModel;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.ServiceModel.Activation;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Collections.Generic;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Text;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Security.Cryptography;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.IO;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml_34稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_35/**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36/// 提供 WCF 服务的类

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_37/// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml[ServiceContract]

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlpublic class WCFService

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml_34稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_35稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    /**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// 返回指定的 User 对象(用于演示 Silverlight 调用 WCF 服务)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// <param name="name">名字</param>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    /// <returns></returns>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    [OperationContract]

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    public User GetUser(string name)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        return new User 稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{ Name = name, DayOfBirth = new DateTime(1980, 2, 14) };

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_37}

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

WCF.xaml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml<UserControl x:Class="Silverlight20.Communication.WCF"

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    <StackPanel HorizontalAlignment="Left" Margin="5">

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml        <TextBlock x:Name="lblMsg" />

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    </StackPanel>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml</UserControl>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

WCF.xaml.cs

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Collections.Generic;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Linq;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Net;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Controls;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Documents;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Input;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Media;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Media.Animation;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Shapes;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing Silverlight20.WCFServiceReference;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Threading;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.ServiceModel;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlnamespace Silverlight20.Communication

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml_34稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_35稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    public partial class WCF : UserControl

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        SynchronizationContext _syncContext;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        /**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        /// 演示 Silverlight 调用 WCF 服务

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        /// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        public WCF()

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            InitializeComponent();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 代理的配置信息在配置文件中,UI线程上的异步调用

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            Demo();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 代理的配置信息在程序中指定,UI线程上的异步调用

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            Demo2();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 后台线程(非UI线程)上的异步调用)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            Demo3();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void Demo()

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            /**//*             

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * 服务名Client - 系统自动生成的代理类

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             *     方法名Completed - 调用指定的方法完成后所触发的事件

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             *     方法名Async(参数1, 参数2 稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43, object 用户标识) - 异步调用指定的方法

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             *     Abort() - 取消调用

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49             */

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            WCFServiceClient client = new WCFServiceClient();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.GetUserCompleted += new EventHandler<GetUserCompletedEventArgs>(client_GetUserCompleted);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.GetUserAsync("webabcd");

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void Demo2()

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            /**//*

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * 服务名Client - 其构造函数可以动态地指定代理的配置信息(Silverlight 2.0 调用 WCF 只支持 BasicHttpBinding)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49             */

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            WCFServiceClient client = new WCFServiceClient(new BasicHttpBinding(), new EndpointAddress("http://localhost:3036/WCFService.svc"));

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.GetUserCompleted += new EventHandler<GetUserCompletedEventArgs>(client_GetUserCompleted);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.GetUserAsync("webabcd2");

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void client_GetUserCompleted(object sender, GetUserCompletedEventArgs e)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            /**//*

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * 方法名CompletedEventArgs.Error - 该异步操作期间是否发生了错误

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * 方法名CompletedEventArgs.Result - 异步操作返回的结果。本例为 User 类型

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * 方法名CompletedEventArgs.UserState - 用户标识

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49             */

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            if (e.Error != null)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                lblMsg.Text += e.Error.ToString() + "\r\n";

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                return;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49            }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            if (e.Cancelled != true)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                OutputResult(e.Result);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49            }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void Demo3()

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // UI 线程

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            _syncContext = SynchronizationContext.Current;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            /**//*

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * ChannelFactory<T>.CreateChannel() - 创建 T 类型的信道

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * 服务名.Begin方法名() - 后台线程上异步调用指定方法(最后一个参数为 代理对象)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49             */

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            WCFService client = new ChannelFactory<WCFService>(new BasicHttpBinding(), new EndpointAddress("http://localhost:3036/WCFService.svc")).CreateChannel();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.BeginGetUser("webabcd3", new AsyncCallback(ResponseCallback), client);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        private void ResponseCallback(IAsyncResult result)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            WCFService client = result.AsyncState as WCFService;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 服务名.End方法名() - 获取在后台线程(非UI线程)上异步调用的结果

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            User user = client.EndGetUser(result);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 调用 UI 线程

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            _syncContext.Post(GetResponse, user);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        private void GetResponse(object state)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            OutputResult(state as User);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        /**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        /// 输出异步调用 WCF 服务的方法后返回的结果

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        /// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        /// <param name="user"></param>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void OutputResult(User user)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            lblMsg.Text += string.Format("姓名:{0};生日:{1}\r\n",

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                user.Name,

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                user.DayOfBirth.ToString("yyyy-MM-dd"));

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_37}


2、对客户端与服务端传输的消息做加密

WCFService.cs(WCF 服务)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Linq;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Runtime.Serialization;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.ServiceModel;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.ServiceModel.Activation;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Collections.Generic;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Text;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Security.Cryptography;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.IO;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml_34稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_35/**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36/// 提供 WCF 服务的类

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_37/// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml[ServiceContract]

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlpublic class WCFService

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml_34稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_35稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    /**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// 返回指定的 User 对象(用于演示传输信息的加密/解密)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// <param name="name"></param>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    /// <returns></returns>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    [OperationContract]

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    public User GetUserByCryptography(string name)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        return new User 稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{ Name = Decrypt(name), DayOfBirth = new DateTime(1980, 2, 14) };

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    /**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// 解密数据

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    /// <param name="input">加密后的字符串</param>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    /// <returns>加密前的字符串</returns>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    public string Decrypt(string input)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 盐值(与加密时设置的值一致)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        string saltValue = "saltValue";

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 密码值(与加密时设置的值一致)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        string pwdValue = "pwdValue";

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        byte[] encryptBytes = Convert.FromBase64String(input);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        byte[] salt = Encoding.UTF8.GetBytes(saltValue);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        AesManaged aes = new AesManaged();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pwdValue, salt);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        aes.KeySize = aes.LegalKeySizes[0].MaxSize;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        aes.Key = rfc.GetBytes(aes.KeySize / 8);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        aes.IV = rfc.GetBytes(aes.BlockSize / 8);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 用当前的 Key 属性和初始化向量 IV 创建对称解密器对象

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        ICryptoTransform decryptTransform = aes.CreateDecryptor();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 解密后的输出流

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        MemoryStream decryptStream = new MemoryStream();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 将解密后的目标流(decryptStream)与解密转换(decryptTransform)相连接

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        CryptoStream decryptor = new CryptoStream(decryptStream, decryptTransform, CryptoStreamMode.Write);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 将一个字节序列写入当前 CryptoStream (完成解密的过程)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        decryptor.Write(encryptBytes, 0, encryptBytes.Length);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        decryptor.Close();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        // 将解密后所得到的流转换为字符串

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        byte[] decryptBytes = decryptStream.ToArray();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        string decryptedString = UTF8Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        return decryptedString;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_37}

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

Cryptography.xaml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml<UserControl x:Class="Silverlight20.Communication.Cryptography"

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    <StackPanel HorizontalAlignment="Left" Margin="5">

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml        <TextBlock x:Name="lblMsg" />

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml    </StackPanel>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml</UserControl>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

Cryptography.xaml.cs

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Collections.Generic;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Linq;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Net;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Controls;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Documents;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Input;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Media;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Media.Animation;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Windows.Shapes;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing Silverlight20.WCFServiceReference;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Text;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.Security.Cryptography;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlusing System.IO;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xmlnamespace Silverlight20.Communication

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_xml_34稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_35稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36    public partial class Cryptography : UserControl

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45    稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        public Cryptography()

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            InitializeComponent();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            Demo();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void Demo()

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            WCFServiceClient client = new WCFServiceClient();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.GetUserByCryptographyCompleted+=new EventHandler<GetUserByCryptographyCompletedEventArgs>(client_GetUserByCryptographyCompleted);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            client.GetUserByCryptographyAsync(Encrypt("webabcd"));

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        void client_GetUserByCryptographyCompleted(object sender, GetUserByCryptographyCompletedEventArgs e)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            if (e.Error != null)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                lblMsg.Text += e.Error.ToString() + "\r\n";

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                return;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49            }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            if (e.Cancelled != true)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                lblMsg.Text += string.Format("姓名:{0};生日:{1}\r\n",

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                    e.Result.Name,

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36                    e.Result.DayOfBirth.ToString("yyyy-MM-dd"));

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49            }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        /**//// <summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        /// 加密数据

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        /// </summary>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        /// <param name="input">加密前的字符串</param>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        /// <returns>加密后的字符串</returns>

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36        private string Encrypt(string input)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45        稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_字符串_43{

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 盐值

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            string saltValue = "saltValue";

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 密码值

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            string pwdValue = "pwdValue";

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            byte[] data = UTF8Encoding.UTF8.GetBytes(input);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            byte[] salt = UTF8Encoding.UTF8.GetBytes(saltValue);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // AesManaged - 高级加密标准(AES) 对称算法的管理类

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            AesManaged aes = new AesManaged();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // Rfc2898DeriveBytes - 通过使用基于 HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2 - 一种基于密码的密钥派生函数)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 通过 密码 和 salt 派生密钥

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pwdValue, salt);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_44稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_方法名_45            /**//*

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * AesManaged.BlockSize - 加密操作的块大小(单位:bit)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * AesManaged.LegalBlockSizes - 对称算法支持的块大小(单位:bit)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * AesManaged.KeySize - 对称算法的密钥大小(单位:bit)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * AesManaged.LegalKeySizes - 对称算法支持的密钥大小(单位:bit)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * AesManaged.Key - 对称算法的密钥

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * AesManaged.IV - 对称算法的密钥大小

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36             * Rfc2898DeriveBytes.GetBytes(int 需要生成的伪随机密钥字节数) - 生成密钥

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49             */

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            aes.BlockSize = aes.LegalBlockSizes[0].MaxSize;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            aes.KeySize = aes.LegalKeySizes[0].MaxSize;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            aes.Key = rfc.GetBytes(aes.KeySize / 8);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            aes.IV = rfc.GetBytes(aes.BlockSize / 8);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 用当前的 Key 属性和初始化向量 IV 创建对称加密器对象

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            ICryptoTransform encryptTransform = aes.CreateEncryptor();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 加密后的输出流

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            MemoryStream encryptStream = new MemoryStream();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 将加密后的目标流(encryptStream)与加密转换(encryptTransform)相连接

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            CryptoStream encryptor = new CryptoStream(encryptStream, encryptTransform, CryptoStreamMode.Write);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 将一个字节序列写入当前 CryptoStream (完成加密的过程)

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            encryptor.Write(data, 0, data.Length);

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            encryptor.Close();

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            // 将加密后所得到的流转换成字节数组,再用Base64编码将其转换为字符串

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            string encryptedString = Convert.ToBase64String(encryptStream.ToArray());

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_异步调用_36            return encryptedString;

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49        }        

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_49    }

稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密_.net_37}