WCF(转.NET 3.5 Beta 2,VS2005)

本文的主要内容是通过ASP.NET Ajax调用WCF(Windows Communication Foundation)服务的代码示例。(ASP.NET Ajax 1.0与3.5都可以调用)

写这篇文章是源于想用asp.net Ajax + WCF来改造博客园的收藏功能。

开发环境是:.net Framework 3.5 Beta 2+Visual Studio 2005。

准备:

1、安装.NET Framework 3.5 Beta 2

asp.net Ajax调用WCF服务需要.NET Framework 3.5 Beta 2中的System.Web.Extensions.dll(3.5.0.0),System.ServiceModel.Web.dll支持。

开始我安装的是.net Framework 3.5 June 2007 Community Technology Preview (CTP),走了一些弯路。

2、安装Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF)

3、检查iis是否有.svc到c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll的映射,如果没有,建立映射,建立时取消“检查文件是否存在”的选择。

开始:

1、在vs 2005中新建一个Web Site项目。

添加web.config,将<authentication mode="Windows" />改为<authentication mode="Forms" />。

2、在该项目中添加一个wcf Service,命名为CNBlogsWCFService.svc。

image

image

3、修改app_code中cnblogswcfservice.cs的代码:

[servicecontract(namespace = "http://www.cnblog.com/")]
public interface ICNBlogsWCFService
{
    [OperationContract]
    string AddToFavorites(string blogID, string postID);
}

public class CNBlogsWCFService : ICNBlogsWCFService
{
    public string AddToFavorites(string blogID, string postID)
    {
        return string.Format("收藏成功!BlogID:{0},PostID:{1}", blogID, postID);
    }
}

如果想进一步了解上述代码,请参考:

Artech[原创]我的WCF之旅(1):创建一个简单的WCF程序

Bruce ZhangWindows Communication Foundation入门(Part Two)

4、修改cnblogswcfservice.svc的代码:

增加:factory="system.servicemodel.activation.webscriptservicehostfactory。

改为:<%@ ServiceHost Language="C#" Debug="true" Service="CNBlogsWCFService" CodeBehind="~/App_Code/CNBlogsWCFService.cs" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"%>

factory是.net Framework 3.5 Beta 2中增加的,而我们用的是Visual Studio 2005 extensions for .NET Framework 3.0,所以要手动加上。

如果不通过ajax调用wcf,需要设置为:factory="system.servicemodel.web.webservicehostfactory"。

5、开始第一次运行,访问http://localhost/AjaxWCFDemo/CNBlogsWCFService.svc,会出现如下页面:

image

6、继续运行,访问http://localhost/AjaxWCFDemo/CNBlogsWCFService.svc/js,你会看到自动生成访问WCF的客户端代理脚本。

7、ok!服务器端的wcf已经准备好了,下面就开始客户端的访问。

8、配置asp.net Ajax,在web.config中进行设置:

<? xml version="1.0" ?>
< configuration >   
  
< appSettings />
  
< connectionStrings />
  
< system .web >
    
< compilation  debug ="false" >
      
< assemblies >
        
< add  assembly ="System.Web.Extensions, Version=3.5.0.0,
 Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
      
</ assemblies >
    
</ compilation >
    
< authentication  mode ="Forms"   />
    
< httpHandlers >
      
< add  verb ="*"  path ="*_AppService.axd"  validate ="false"  type ="System.Web.Extensions, 
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
      
< add  verb ="GET,HEAD"  path ="ScriptResource.axd"  
type
="System.Web.Handlers.ScriptResourceHandler, 
System.Web.Extensions, Version=1.0.61025.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 validate ="false" />
    
</ httpHandlers >
    
< httpModules >
      
< add  name ="ScriptModule"  
type
="System.Web.Handlers.ScriptModule, System.Web.Extensions, 
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
/>
    
</ httpModules >
  
</ system.web >
</ configuration >  

注意:要设置为3.5版本的system.web.extensions,如果使用asp.net ajax 1.0会得不到调用WCF服务返回的结果。

后来发现可以使用asp.net ajax 1.0调用WCF的服务,只需要对返回结果稍做处理,请看文后的补充说明。

9、修改default.aspx的代码:

1)添加scriptmanager,将servicereference设置为:~/cnblogswcfservice.svc。

2)将<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>

改为:

<%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    Namespace="System.Web.UI" TagPrefix="asp" %>

2)添加调用wcf服务的代码,完整代码如下:

<% @ Page Language = " C# "  AutoEventWireup = " true "   CodeFile = " Default.aspx.cs "
 Inherits = " _Default "   %>
<% @ Register Assembly = " System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35
"    Namespace = " System.Web.UI "  TagPrefix = " asp "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > Ajax WCF 演示 - 博客园 - www.cnblogs.com </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div  align ="center"  style ="margin-top:50px" >
        
< asp:ScriptManager  ID ="ScriptManager1"  runat ="server" >
            
< Services >
                
< asp:ServiceReference  Path ="~/CNBlogsWCFService.svc"   />
            
</ Services >
        
</ asp:ScriptManager >
        
< href ="#"  onclick ="AddToFavorites('1','2')" > 博客园收藏 </ a >< br  />
        
< br  />
        
< span  style ="color:Red"  id ="Msg" ></ span >  

        
< script  type ="text/javascript" >
        
function  AddToFavorites(blogID,postID)
        {
            
var  wcf  =   new  www.cnblog.com.ICNBlogsWCFService();
            wcf.AddToFavorites(blogID,postID,OnSucceeded);
        }
        
function  OnSucceeded(result)
        {    
            document.getElementById(
" Msg " ).innerHTML  =  result;         
        }   
        
</ script >  

    
</ div >
    
</ form >
</ body >
</ html >

10、一切就绪,体验一下ajax调用wcf的快乐!

转载于:https://www.cnblogs.com/illele/archive/2007/10/31/943902.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ajax技术,无刷新技术 导读:ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationService和ProfileService,还有页面错误处理等。 ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件 导读:在ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-Page和Content-Page中需要引入不同的脚本时,这就需要在Content-page中使用ScriptManagerProxy,而不是ScriptManager,ScriptManager 和 ScriptManagerProxy 是两个非常相似的控件。 ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法(第一篇)。 ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel其他的一些使用方法(第二篇)。 ASP.NET AJAX入门系列(6):UpdateProgress控件简单介绍 导读:在ASP.NET AJAX Beta2中,UpdateProgress控件已经从“增值”CTP中移到了ASP.NET AJAX核心中,本文简单介绍一些它的基本用法,翻译自官方文档。 ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程 导读:在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息,翻译自官方文档。 ASP.NET AJAX入门系列(8):自定义异常处理 导读:在UpdatePanel控件异步更新时,如果有错误发生,默认情况下会弹出一个Alert对话框显示出错误信息,这对用户来说是不友好的,本文看一下如何在服务端和客户端脚本中自定义异常处理,翻译自官方文档。 ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel 导读:本文简单介绍一下在母版页中使用UpdatePanel控件,翻译自官方文档。 ASP.NET AJAX入门系列(10):Timer控件简单使用 导读:本文主要通过一个简单示例,让Web页面在一定的时间间隔内局部刷新,来学习一下ASP.NET AJAX中的服务端Timer控件的简单使用。 ASP.NET AJAX入门系列(11):在多个UpdatePanle中使用Timer控件 导读:本文将使用Timer控件更新两个UpdatePanel控件,Timer控件将放在UpdatePanel控件的外面,并将它配置为UpdatePanel的触发器,翻译自官方文档 作者:TerryLee 出处:http://terrylee.cnblogs.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值