WEB开发网
开发学院WEB开发ASP.NET 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTc... 阅读

稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持

 2010-10-12 12:30:06 来源:WEB开发网   
核心提示: 3、两种 HTTP 请求方式,即 ClientHttp 和 BrowserHttp 的区别服务端:HttpResult.aspx.cs代码using System;using System.Collections.Generic;using System.Linq;using System.We

3、两种 HTTP 请求方式,即 ClientHttp 和 BrowserHttp 的区别

服务端:

HttpResult.aspx.cs

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Silverlight40.Web
{
    public partial class HttpResult : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 返回当前 HTTP 请求的 HTTP 方法及 Cookie
            Response.Write(string.Format("HttpMethod: {0}, Cookie - name: {1}", Request.HttpMethod, Request.Cookies["name"].Value));
            Response.End();
        }
    }
}

客户端:

ClientHttpAndBrowserHttp.xaml.cs

代码

/*
 * BrowserHttp - 由浏览器构造 HTTP 请求。默认值
 * ClientHttp - 由 Silverlight 客户端构造 HTTP 请求
 *
 * 指定 HTTP 请求为 BrowserHttp 类型或 ClientHttp 类型的方法如下:
 *     WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); - 根据前缀指定 HTTP 请求的方式
 *     (HttpWebRequest)WebRequestCreator.ClientHttp.Create(); - 为单个请求指定 HTTP 请求的方式
 *
 * 本例演示如果通过 ClientHttp,来实现 PUT 方法的 HTTP 请求以及如何手动构造 Cookie(这些在 BrowserHttp 方式下是无法实现的)
 * 详细的 BrowserHttp 和 ClientHttp 的区别参看文档
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

using System.Net.Browser;
using System.IO;
using System.Threading;

namespace Silverlight40.Communication
{
    public partial class ClientHttpAndBrowserHttp : Page
    {
        SynchronizationContext _syncContext;

        public ClientHttpAndBrowserHttp()
        {
            InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            _syncContext = SynchronizationContext.Current;

            // 创建一个 ClientHttp 方式的 HttpWebRequest 对象
            HttpWebRequest request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri("http://localhost:9483/HttpResult.aspx"));

            // ClientHttp 可以使用任何 Http 方法(BrowserHttp 只能使用 GET 和 POST)
            request.Method = "PUT";

            // ClientHttp 可以手工构造 Cookie(如果需要 Forms 验证或 NTLM 验证则只能通过 BroswerHttp 方式)
            request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(new Uri("http://localhost:9483"), new Cookie("name", "webabcd"));

            request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);

        }

        // 获取服务返回的结果
        private void ResponseCallback(IAsyncResult result)
        {
            HttpWebRequest request = result.AsyncState as HttpWebRequest;
            WebResponse response = request.EndGetResponse(result) as HttpWebResponse;

            if (response != null)
            {
                Stream responseStream = response.GetResponseStream();
                using (StreamReader sr = new StreamReader(responseStream))
                {
                    string s = sr.ReadToEnd();
                    Deployment.Current.Dispatcher.BeginInvoke(delegate { MessageBox.Show(s); });
                }
            }
        }
    }
}

OK

源码下载:http://files.cnblogs.com/webabcd/Silverlight.rar

上一页  2 3 4 5 6 7 

Tags:稳扎稳打 Silverlight 通信

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接