Silverlight_Rest_WCF系列之二:调用Rest
2011-04-29 23:00
337 查看
1:新建Silverlight4应用程序,名称为SLClient,选择web承载。
2:在MainPage下新建4个按钮,代码如下:
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<Button Content="GET" x:Name="Get" Click="Get_Click"/>
<Button Content="PUT" x:Name="Put" Click="Put_Click"/>
<Button Content="POST" x:Name="Post" Click="Post_Click" />
<Button Content="DELETE" x:Name="Delete" Click="Delete_Click" />
</StackPanel>
</Grid>
3:在上一篇的随便中,服务的地址都是http://localhost:19598/ProductService.svc/Product ,我门首先调用Get服务。
private void Get_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.DownloadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product "));
}
在这里,构造WebClient对象用来提交请求,基本的代码就不解释了。
我们点击Get按钮,弹出错误提示如下图:
View Code
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
6:我们继续调用Get服务,终于调用成功,结果如下图:
7:调用POST服务,代码如下:
private void Post_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
string data = "{\"Id\":\"5cee6c7c-9976-424b-99ab-e9cc90585105\",\"Name\":\"111\"}";
webClient.UploadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.UploadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product"), "POST",data);
}
点击POST按钮,弹出
这个问题主要是因为服务器并不知道data是什么东西,为了让服务器明白data是json数据,我们需要设置
Content-Type:application/json;
改好后的代码如下:
private void Post_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
//设置请求的内容格式为application/json。
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
//构造json数据。
string data = "{\"Id\":\"5cee6c7c-9976-424b-99ab-e9cc90585105\",\"Name\":\"111\"}";
webClient.UploadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.UploadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product"), "POST",data);
}
8:尝试调用PUT,DELETE,代码如下:
private void Put_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
//设置请求的内容格式为application/json。
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
//构造json数据。
string data = "{\"Id\":\"5cee6c7c-9976-424b-99ab-e9cc90585105\",\"Name\":\"111\"}";
webClient.UploadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.UploadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product"), "PUT", data);
}
点击PUT按钮,结果弹出提示:
在监视窗口输入$exception可以查看当前的异常。
可以很明显的得知此请求不支持指定的方法,也就是说WebClient不支持PUT,DELETE,那我们又该如何做呢,下回分解..
2:在MainPage下新建4个按钮,代码如下:
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<Button Content="GET" x:Name="Get" Click="Get_Click"/>
<Button Content="PUT" x:Name="Put" Click="Put_Click"/>
<Button Content="POST" x:Name="Post" Click="Post_Click" />
<Button Content="DELETE" x:Name="Delete" Click="Delete_Click" />
</StackPanel>
</Grid>
3:在上一篇的随便中,服务的地址都是http://localhost:19598/ProductService.svc/Product ,我门首先调用Get服务。
private void Get_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.DownloadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product "));
}
在这里,构造WebClient对象用来提交请求,基本的代码就不解释了。
我们点击Get按钮,弹出错误提示如下图:
View Code
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
6:我们继续调用Get服务,终于调用成功,结果如下图:
7:调用POST服务,代码如下:
private void Post_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
string data = "{\"Id\":\"5cee6c7c-9976-424b-99ab-e9cc90585105\",\"Name\":\"111\"}";
webClient.UploadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.UploadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product"), "POST",data);
}
点击POST按钮,弹出
这个问题主要是因为服务器并不知道data是什么东西,为了让服务器明白data是json数据,我们需要设置
Content-Type:application/json;
改好后的代码如下:
private void Post_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
//设置请求的内容格式为application/json。
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
//构造json数据。
string data = "{\"Id\":\"5cee6c7c-9976-424b-99ab-e9cc90585105\",\"Name\":\"111\"}";
webClient.UploadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.UploadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product"), "POST",data);
}
8:尝试调用PUT,DELETE,代码如下:
private void Put_Click(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
//设置请求的内容格式为application/json。
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
//构造json数据。
string data = "{\"Id\":\"5cee6c7c-9976-424b-99ab-e9cc90585105\",\"Name\":\"111\"}";
webClient.UploadStringCompleted += (o, ea) =>
{
MessageBox.Show(ea.Result);
};
webClient.UploadStringAsync(new Uri("http://localhost:19598/ProductService.svc/Product"), "PUT", data);
}
点击PUT按钮,结果弹出提示:
在监视窗口输入$exception可以查看当前的异常。
可以很明显的得知此请求不支持指定的方法,也就是说WebClient不支持PUT,DELETE,那我们又该如何做呢,下回分解..
相关文章推荐
- 关于Silverlight 调用WCF/Rest的异常
- Silverlight_Rest_WCF系列之六:跨线程
- Silverlight_Rest_WCF系列之三:PUT和DELETE
- Silverlight_Rest_WCF系列之一:简单的Rest
- Silverlight_Rest_WCF系列之四:Rest调用者,RestInvoker.
- 解析Silverlight调用WCF/Rest异常的解决方法
- Silverlight_Rest_WCF系列之五:RestInvoker的使用
- [Silverlight入门系列]同步调用多个WCF RIA Services的异步方法
- Silverlight 动态调用 WCF And WebService
- Web编程模型(WCF创建REST, AJAX调用WCF)
- Silverlight调用一般性处理程序模拟Silverlight调用WCF效果
- 稳扎稳打Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密
- 一步一步学Silverlight 2系列(14):数据与通信之WCF
- Silverlight同步(Synchronous)调用WCF服务
- WCF REST系列文章汇总(共9篇)
- Silverlight动态调用WEBSERVICE,WCF方法
- 解决在Silverlight中调用WCF控制台程序宿主时跨域问题
- 稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据
- Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】
- silverlight跨域调用wcf总结