Silverlight杂记-获取网络数据源的几种方式
2010-12-25 01:33
204 查看
1跨域验证
<?xml version="1.0" encoding="utf-8"?><access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
2与数据源连接
1 SOAP services
服务端新建一个asmx 得到
[WebService(Namespace = "http://xxxx.net/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class SampleAsmx : System.Web.Services.WebService
{
[WebMethod]
public string GetCoolText(int number)
{
switch (number)
{
case 0: return "zero";
case 1: return "one";
default: return "unknown";
}
}
客户端
private void GetString_Click(object sender, RoutedEventArgs e) {
Binding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new
EndpointAddress("http://localhost:55905/SampleAsmx.asmx");
SilverService.SampleAsmxSoapClient proxy = new
SilverService.SampleAsmxSoapClient(myBinding, myEndpoint);
proxy.GetCoolTextCompleted += proxy_GetCoolTextCompleted;
proxy.GetCoolTextAsync(1);
}
void proxy_GetCoolTextCompleted(object sender,
SilverService.GetCoolTextCompletedEventArgs e) {
Results.Text = e.Result;
(sender as SilverService.SampleAsmxSoapClient).CloseAsync();
}
客户端的config
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="SampleAsmxSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:55905/SampleAsmx.asmx" binding="basicHttpBinding"
bindingConfiguration="SampleAsmxSoap" contract="SilverService.SampleAsmxSoap"
name="SampleAsmxSoap" />
</client>
</system.serviceModel>
</configuration>
这里会涉及到一堆WCF 的知识。可能需要你额外去学习。
2 RESTful Sercvices
从RESTFUL的services上获取信息private void GetSingleXml_Click(object sender, RoutedEventArgs e)
{
UIThread = SynchronizationContext.Current;
string rawPath
= "http://www.silverlightinaction.com/Authors.svc/SingleXml/{0}";
Uri path = new Uri(string.Format(rawPath, Input.Text),
UriKind.Absolute);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(path);
request.BeginGetResponse(SingleXmlCallBack, request);
}
private void SingleXmlCallBack(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response
= (HttpWebResponse)request.EndGetResponse(result);
Stream responseStream = response.GetResponseStream();
UIThread.Post(UpdateUiText, responseStream);
}
发送信息过去
private void Test_Click(object sender, RoutedEventArgs e)
{
UIThread = SynchronizationContext.Current;
Uri path = new
Uri("http://www.silverlightinaction.com/Authors.svc/Update/Brown",
UriKind.Absolute);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(path);
request.Method = "POST";
request.ContentType = "application/xml";
request.BeginGetRequestStream(AddPayload, request);
}
private void AddPayload(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest) result.AsyncState;
StreamWriter dataWriter =
new StreamWriter(request.EndGetRequestStream(result));
dataWriter.Write("<?xml version=\"1.0\"?><Author><FirstName>Bob" +
"</FirstName><LastName>Smith</LastName></Author>");
dataWriter.Close();
request.BeginGetResponse(SingleJsonCallBack, request);
}
private void SingleJsonCallBack(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response =
(HttpWebResponse)request.EndGetResponse(result);
Stream responseStream = response.GetResponseStream();
UIThread.Post(UpdateUiText, responseStream);
}
3HTTP方式
1手动构造
使用System.Net.Browser.WebRequestCreator 来构造。HttpWebRequest 类
HttpWebRequest request =
(HttpWebRequest)WebRequestCreator.ClientHttp.Create(
new Uri("http://api.10rem.net/Authors"));
request.Method = "PUT";
2为特定的网站或协议自动使用client stack
如为某个网站 HTTP 和 SSL都使用 client stack 你可以这么写为指定的 URI 注册 WebRequest 子代。
WebRequest.RegisterPrefix( http://www.baidu.com, WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix(
"https://www.baidu.com", WebRequestCreator.ClientHttp);
3Authentication credentials
The client networking stack supports NTLM, basic, and digest authorizationNTLM是NT LAN Manager的缩写,这也说明了协议的来源。NTLM 是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。
在网络环境中,NTLM 用作身份验证协议以处理两台计算机(其中至少有一台计算机运行 Windows NT 4.0 或更早版本)之间的事务。具有此配置的网络称为“混合模式”,这是 Windows Server 2003 家族中的默认设置
参考
http://www.codeproject.com/KB/aspnet/ASPDOTNETauthentication.aspx
http://social.msdn.microsoft.com/Forums/zh-SG/sqldataaccess/thread/c60a86f0-cda5-47b4-8448-0c5730084896
实现 digest authorization
private void SendRequest()
{
HttpWebRequest.RegisterPrefix(
"http://", WebRequestCreator.ClientHttp);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(
new Uri("http://XX.net"));
req.UseDefaultCredentials = false;
req.Credentials =
new NetworkCredential("Pete", "password");//任意多参数
req.BeginGetResponse(OnRequestCompleted, req);
}
private void OnRequestCompleted(IAsyncResult asyncResult)
{
HttpWebRequest request =
(HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse response =
(HttpWebResponse)request.EndGetResponse(asyncResult);
................
}
4使用cookies
private void SendRequest()
{
WebRequest.RegisterPrefix(
"http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix(
"https://", WebRequestCreator.ClientHttp);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(
new Uri("http://baidu.com"));
CookieCollection cookies = new CookieCollection();
cookies.Add(new Cookie("firstName", "Pete"));
cookies.Add(new Cookie("lastName", "Brown"));
cookies.Add(new Cookie("lastAccess", DateTime.Now.ToString()));
req.CookieContainer = new CookieContainer();
req.CookieContainer.Add(
new Uri("http://baidu.com"), cookies);
req.BeginGetResponse(OnRequestCompleted, req);
}
private void OnRequestCompleted(IAsyncResult asyncResult)
{
HttpWebRequest req =
(HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse response =
(HttpWebResponse)req.EndGetResponse(asyncResult);
...
foreach (Cookie cookie in response.Cookies)
{
Debug.WriteLine(cookie.Name + ":" + cookie.Value);
}
}
相关文章推荐
- Silverlight-获取网络数据源的几种方式
- AngularJS中获取数据源的几种方式
- 网络获取图片操作的几种方式
- 本地获取图片的几种常用方式和网络获取图片
- 获取网络图片的几种方式
- jQeury中获取dom元素的几种方式-$(selector)、$()示例 (转载)
- 获取Bitmap的几种方式总结
- 笔记26 | Android获取系统时间的几种种方式
- Android获取设备唯一ID的几种方式
- 虚拟机的几种网络方式详解(桥接、nat、Host-only)
- Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》
- springmvc(基础五) Spring3 mvc 获取请求参数的几种方式
- Jquery 获取对象的几种方式介绍
- springMVC 中几种获取request和response的方式
- 从Spring容器中获取bean的几种方式
- C语言获取系统时间的几种方式
- 获取View宽高的几种方式及View和ViewGroup测量的简单实现
- VM网络设置几种方式
- java中获取文件路径的几种方式
- python执行系统命令后获取返回值的几种方式集合