且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Silverlight_Rest_WCF系列之二:调用Rest

更新时间:2022-10-02 13:49:21

1:新建Silverlight4应用程序,名称为SLClient,选择web承载。

2:在MainPage下新建4个按钮,代码如下:

Silverlight_Rest_WCF系列之二:调用Rest
<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>
Silverlight_Rest_WCF系列之二:调用Rest

3:在上一篇的随便中,服务的地址都是http://localhost:19598/ProductService.svc/Product ,我门首先调用Get服务。

Silverlight_Rest_WCF系列之二:调用Rest
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 "));
        }
Silverlight_Rest_WCF系列之二:调用Rest

在这里,构造WebClient对象用来提交请求,基本的代码就不解释了。

我们点击Get按钮,弹出错误提示如下图:

Silverlight_Rest_WCF系列之二:调用Rest

这里的主要原因是Silverlight跨域需要证书和授权。

5:在上一篇文章的Web跟目录下新建clientaccesspolicy.xml和crossdomain.xml。

代码结构如下图:

Silverlight_Rest_WCF系列之二:调用Rest

clientaccesspolicy.xml:

Silverlight_Rest_WCF系列之二:调用RestView Code

crossdomain.xml:

Silverlight_Rest_WCF系列之二:调用RestView Code

6:我们继续调用Get服务,终于调用成功,结果如下图:

Silverlight_Rest_WCF系列之二:调用Rest

7:调用POST服务,代码如下:

Silverlight_Rest_WCF系列之二:调用Rest
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);
        }
Silverlight_Rest_WCF系列之二:调用Rest

点击POST按钮,弹出

Silverlight_Rest_WCF系列之二:调用Rest

这个问题主要是因为服务器并不知道data是什么东西,为了让服务器明白data是json数据,我们需要设置

Content-Type:application/json;

改好后的代码如下:

Silverlight_Rest_WCF系列之二:调用Rest
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);
        }
Silverlight_Rest_WCF系列之二:调用Rest

8:尝试调用PUT,DELETE,代码如下:

Silverlight_Rest_WCF系列之二:调用Rest
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);
        }
Silverlight_Rest_WCF系列之二:调用Rest

点击PUT按钮,结果弹出提示:

Silverlight_Rest_WCF系列之二:调用Rest

在监视窗口输入$exception可以查看当前的异常。

Silverlight_Rest_WCF系列之二:调用Rest

可以很明显的得知此请求不支持指定的方法,也就是说WebClient不支持PUT,DELETE,那我们又该如何做呢,下回分解..






本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2011/04/29/silverlight_Rest_WCF.html,如需转载请自行联系原作者