网络和通信 - Silverlight 中的 HTTP 通信和安全

Silverlight 支持几种使用 HTTP/HTTPS 的方案。虽然可以使用多种方式和技术执行 HTTP 调用,但是下表描述的是针对这些 HTTP 通信方案的建议方法

j8RNtmjyuWjzwAAAABJRU5ErkJggg==

执行 HTTP 调用的选项

确定应由浏览器还是客户端来执行应用程序的 HTTP 处理后,应在创建任何 Web 请求之前指定该处理。然后可以通过使用客户端代理类或自己构造调用来执行 HTTP 调用

使用代理类

如果要与 SOAP、WCF 或 ASP.NET AJAX Web 服务进行通信,可以基于 Web 服务元数据创建一个代理类并使用该代理与 Web 服务进行通信。Silverlight 使用 Windows Communication Foundation (WCF) 功能创建代理并通过 HTTP 发送 SOAP 1.1 消息。如果使用 Visual Studio,可以右击您的 Silverlight 项目,选择"添加服务引用"来自动创建代理。该代理为您创建消息并处理网络通信。

创建 HTTP 请求

如果您希望自己执行 HTTP 调用,可以使用以下在 System.Net 命名空间中找到的类。

  • WebClient

  • HttpWebRequest 和HttpWebResponse

通过这些类,您可以执行 GET 和 POST 请求并在某些情况下允许使用请求标头。此外,可以配置这些类以在 GET 请求上启用渐进式下载。

WebClient 类

WebClient 类提供了一个基于事件的简单模型,使您可以下载和上载流和字符串。如果不希望使用代理类,那么 WebClient 是个不错的选择。通常,此类易于使用,但为自定义通过网络发送的消息而提供的选项较少。

若要使用 WebClient 执行 POST 请求并上载资源文件或字符串,请使用以下方法之一。

  • WebClient.OpenWriteAsync

  • WebClient.UploadStringAsync

可以通过设置 WebClient.Headers 属性对请求设置标头。必须根据客户端访问策略文件允许请求标头

ContractedBlock.gifExpandedBlockStart.gifView Code
// Create the web client.
WebClient client = new WebClient();
public Page()
{
InitializeComponent();

// Associate the web client with a handler for its
// UploadStringCompleted event.
client.UploadStringCompleted +=
new UploadStringCompletedEventHandler(client_UploadStringCompleted);
}



private void Button_Click(object sender, RoutedEventArgs e)
{
// Create the request.
string postRequest = "<entry xmlns='http://www.w3.org/2005/Atom'>"
+ "<title type='text'>New Restaurant</title>"
+ "<content type='xhtml'>"
+ " <div xmlns='http://www.w3.org/1999/xhtml'>"
+ " <p>There is a new Thai restaurant in town!</p>"
+ " <p>I ate there last night and it was <b>fabulous</b>.</p>"
+ " <p>Make sure and check it out!</p>"
+ " </div>"
+ " </content>"
+ " <author>"
+ " <name>Pilar Ackerman</name>"
+ " <email>packerman@contoso.com</email>"
+ " </author>"
+ "</entry>";

// Sent the request to the specified URL.
client.UploadStringAsync(new Uri("http://blogs.contoso.com/post-create?blogID=1234",
UriKind.Absolute), postRequest);
}

// Event handler for the UploadStringCompleted event.
void client_UploadStringCompleted(object sender,
UploadStringCompletedEventArgs e)
{
// Output the response.
if (e.Error != null)
tb1.Text
= e.Error.Message;
else
tb1.Text
= e.Result;
}

若要使用 WebClient 执行 GET 请求来检索字符串或其他资源文件,请使用以下方法之一。

  • WebClient.OpenReadAsync

  • WebClient.DownloadStringAsync

若要启用 WebClient 的渐进式下载,请将 AllowReadStreamBuffering 属性设置为 false

HttpWebRequest 类和 HttpWebResponse 类

HttpWebRequest 类和 HttpWebResponse 类比 WebClient 支持更复杂的通信方案。可以按照 .NET Framework 异步模式使用 HttpWebRequest 和 HttpWebResponse 执行请求。使用 IAsyncResult 可提供异步请求和响应之间的连接。始终对新的非 UI 线程调用 HttpWebRequest 委托,这意味着如果计划在 UI 中使用响应,则需要调用回 UI 线程。可以通过检索当前的 SynchronizationContext 来执行此操作。

ContractedBlock.gifExpandedBlockStart.gifView Code
SynchronizationContext syncContext;
private void Button_Click(object sender, RoutedEventArgs e)
{
// Grab SynchronizationContext while on UI Thread
syncContext = SynchronizationContext.Current;

// Create request
HttpWebRequest request =
WebRequest.Create(
new Uri("http://blogs.contoso.com/post-create?blogID=1234",
UriKind.Absolute))
as HttpWebRequest;
request.Method
= "POST";


// Make async call for request stream. Callback will be called on a background thread.
IAsyncResult asyncResult =
request.BeginGetRequestStream(
new AsyncCallback(RequestStreamCallback), request);

}
string statusString;
private void RequestStreamCallback(IAsyncResult ar)
{
HttpWebRequest request
= ar.AsyncState as HttpWebRequest;
request.ContentType
= "application/atom+xml";
Stream requestStream
= request.EndGetRequestStream(ar);
StreamWriter streamWriter
= new StreamWriter(requestStream);

streamWriter.Write(
"<entry xmlns='http://www.w3.org/2005/Atom'>"
+ "<title type='text'>New Restaurant</title>"
+ "<content type='xhtml'>"
+ " <div xmlns='http://www.w3.org/1999/xhtml'>"
+ " <p>There is a new Thai restaurant in town!</p>"
+ " <p>I ate there last night and it was <b>fabulous</b>.</p>"
+ " <p>Make sure and check it out!</p>"
+ " </div>"
+ " </content>"
+ "<author>"
+ " <name>Pilar Ackerman</name>"
+ " <email>packerman@contoso.com</email>"
+ " </author>"
+ "</entry>");


// Close the stream.
streamWriter.Close();

// Make async call for response. Callback will be called on a background thread.
request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);

}
private void ResponseCallback(IAsyncResult ar)
{
HttpWebRequest request
= ar.AsyncState as HttpWebRequest;
WebResponse response
= null;
try
{
response
= request.EndGetResponse(ar);
}
catch (WebException we)
{
statusString
= we.Status.ToString();
}
catch (SecurityException se)
{
statusString
= se.Message;
if (statusString == "")
statusString
= se.InnerException.Message;
}

// Invoke onto UI thread
syncContext.Post(ExtractResponse, response);
}

private void ExtractResponse(object state)
{
HttpWebResponse response
= state as HttpWebResponse;

if (response != null && response.StatusCode == HttpStatusCode.OK)
{
StreamReader responseReader
= new StreamReader(response.GetResponseStream());


tb1.Text
= response.StatusCode.ToString() +
" Response: " + responseReader.ReadToEnd();
}
else
tb1.Text
= "Post failed: " + statusString;
}

转载于:https://www.cnblogs.com/landexia/archive/2011/03/20/1989282.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下g++和gcc_Linux中gcc和g ++有什么区别?

linux下g和gccgcc和g 之间的区别 (Difference between gcc and g) Both are the compilers in Linux to compile and run C and C programs. Initially gcc was the GNU C Compiler but now a days GCC (GNU Compiler Collections) provides many compilers, two are: gcc and …

WT2605C高品质音频蓝牙语音芯片:外接功放实现双声道DAC输出的优势

在音频处理领域&#xff0c;双声道DAC输出能够提供更为清晰、逼真的音效&#xff0c;增强用户的听觉体验。针对这一需求&#xff0c;唯创知音的WT2605C高品质音频蓝牙语音芯片&#xff0c;通过外接功放实现双声道DAC输出&#xff0c;展现出独特的应用优势。 一、高品质音频处理…

对c++primer 16.6.1的第4小节的代码说明

这段代码是这样的: template<typename T>int compare(const T& t1,const T& t2){ cout<<"范型"<<endl; return 1;} int main(){   cout<<compare("hello","world")<<endl;} template<> int compa…

php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据

我正在尝试在PHP的curl请求中上传文件和json数据 . 请求在命令行中使用curl正常工作 . 这是命令行中的curl请求&#xff1a;curl -v --basic -uusername -F file"documentTest.pdf;typeapplication/octet-stream" -F data{"nomDocument":"test.pdf&qu…

角点检测(Harris角点检测法)

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录原理讲解【1】为何选取角点作为特征&#xff1f;【2】角点的定义&#xff1a;…

02-图像的几何变换

一、图片缩放 imageInfo&#xff1a;图片宽、高、通道个数等 缩放&#xff1a; 等比例缩放&#xff1a;宽高比不变 任意比例缩放&#xff1a;图片拉伸、非拉伸 窗体大小 实现步骤&#xff1a; 1&#xff0c;完成图像的加载&#xff0c;拿到图像的数据信息 2&#xff0c;图片的宽…

c ++查找字符串_C ++数组| 查找输出程序| 套装5

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){char* STR[] { "HELLO", "HIII", "RAM", "SHYAM", "MOHAN" };cout << (*STR 2)[2];return 0;}Output: 输出&…

MSSQL 链接Oracle 表

在Oracle中&#xff0c;要访问远程的另外一台数据库的话&#xff0c;是建立DBlink的方式。 在MSSQL中&#xff0c;则是以建立“link server 链接服务器”来远程访问另外一台数据库。 现在从MSSQL 2005访问Oracle的scott.dept。 首先&#xff0c;安装Oracle的客户端PLSQL DEVELO…

SQL Server 2008 高可用性视频(四)-- 故障转移群集

做数据库的朋友都知道, 其实数据库的工作大致可以分为三类: 数据库设计与开发, 数据库管理, 数据库商业智能. 其中数据库管理的工作大部分是由DBA在做, DBA们除了要保证正常的数据库运行, 还要采取必要措施提升数据库的性能, 比如数据库的性能优化, 以及保证数据库系统的高可用…

php 虚拟空间,什么是php虚拟主机?

什么是php虚拟主机&#xff1f;什么是php虚拟主机Php虚拟主机简单来说就是支持php语言开发的虚拟主机&#xff0c;我们把它称为php虚拟主机。php虚拟主机的工作原理Php是一种html嵌入式的语言&#xff0c;是一种在服务器端执行的嵌入html文档的脚本语言&#xff0c;类似于c语言…

C++---肿瘤面积

【问题描述】 在一个正方形的灰度图片上&#xff0c;肿瘤是一块矩形的区域&#xff0c;肿瘤的边缘所在的像素点在图片 中用 0 表示。其它肿瘤内和肿瘤外的点都用 255 表示。现在要求你编写一个程序&#xff0c;计算肿瘤内部的像素点的个数&#xff08;不包括肿瘤边缘上的点&am…

微机原理——8086中断类型以及中断向量表、中断响应、中断返回

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录先验知识回顾控制寄存器回顾1、8086中断类型1、外部可屏蔽中断2、外部不可屏蔽…

著名开源项目_著名开源项目案例研究

著名开源项目维基百科 (Wikipedia) Wikipedia is no less than an encyclopedia available free of cost to the public nowadays. If you want to write a passage, know about some famous person or thing you are just one click away from your desired article. 维基百科…

资料整理-工具篇

* 代码利器 Resharper 作为一个C#er&#xff0c;非常感谢有Resharper这样的代码利器。在VS系列的IDE中&#xff0c;使用Resharper后&#xff0c;你会发现&#xff0c;原来写代码也可以是一种享受&#xff01; 1. 首先&#xff0c;下载Resharper。下载地址&#xff1a;http://ww…

企业级php第三方支付平台,ThinkPHP新版企业级php第三方api第四方支付平台程序源码商业版 带接口文件等 某宝售价3000元...

本帖最后由 商业源码网 于 2017-12-21 11:23 编辑7 h$ . , C u0 R3 R y$ z! ] q( D D$ s( Y源码说明&#xff1a;) G: y; R# G0 0 g N. ; \0 w, A9 {5 # P今天黑锐给大家分享给好东西&#xff01;很不错的支付系统&#xff01;喜欢研究支付接口的朋友别错过&#xff01;ThinkP…

C++---两数之和

【问题描述】 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 【输入形…

C++语法:构造函数以及析构函数

目录定义主要特点C的构造函数定义格式示例1&#xff1a;不带参数的构造函数示例2&#xff1a;带参数的构造函数示例3&#xff1a;使用初始化列表来初始化字段类的析构函数定义 构造函数 &#xff0c;是一种特殊的方法。主要用来在创建对象时初始化对象&#xff0c; 即为对象成…

大学各系男生追MM的专业短信

环卫系 天气预报&#xff1a;今天凌晨到白天有时有想你&#xff0c;下午转大到暴想&#xff0c;预计心情将由此降低五度。受延长低气压带影响&#xff0c;预计此类天气将持续到见到你为止。 历史系 据说最早的爱情诗是这样写的&#xff1a;你来自云南元谋&#xff0c;我来自北京…

scala中命名参数函数_Scala中带有命名参数的函数

scala中命名参数函数具有命名参数的函数 (Functions with named arguments ) A function is Scala can take multiple arguments. These arguments are traditionally called in sequence while calling a function. But in Scala programming, the program is given the power…

【IT笔试面试题整理】 二叉树任意两个节点间最大距离

求一个二叉树中任意两个节点间的最大距离&#xff0c;两个节点的距离的定义是这两个节点间边的个数&#xff0c; 比如某个孩子节点和父节点间的距离是1&#xff0c;和相邻兄弟节点间的距离是2&#xff0c;优化时间空间复杂度。 一种是&#xff1a;经过根节点&#xff0c;此时只…