准备
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 2007年6月Community Technology Preview(CTP),走了一些弯路。
2,安装用于.NET Framework 3.0(WCF和WPF)的Visual Studio 2005扩展。
3,检查IIS是否有.svc到c:\ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll的映射,如果没有,建立映射,建立时取消“检查文件是否存在”的选择。
开始
1,在VS 2005中新建一个网站项目。
添加web.config,将更改。
2,在该项目中添加一个WCF服务,命名为CNBlogsWCFService.svc。
3,修改App_Code中CNBlogsWCFService.cs的代码:
以下是引用片段:
[ServiceContract(Namespace =“ http://www.51csharp.com/”)]公共接口ICNBlogsWCFService {[OperationContract]字符串AddToFavorites(字符串blogID,字符串postID);}公共类CNBlogsWCFService:ICNBlogsWCFService {公共字符串AddToFavorites(字符串blogID,字符串postID){返回string.Format(“收藏成功!BlogID:{0},PostID:{1}”,blogID,postID);}} |
如果想进一步了解上述代码,请参考:
Artech:[原创]我的WCF之旅(1):创建一个简单的WCF程序Bruce Zhang:Windows Communication Foundation入门(第二部分)
4,修改CNBlogsWCFService.svc的代码:
增加:以下是引用片段:
Factory =“ System.ServiceModel.Activation.WebScriptServiceHostFactory |
转变:
以下是引用片段:
<%@ ServiceHost语言=“ C#” Debug =“ true” Service =“ CNBlogsWCFService” CodeBehind =“〜/ App_Code / CNBlogsWCFService.cs” Factory =“ System.ServiceModel.Activation.WebScriptServiceHostFactory”%> |
Factory是.NET Framework 3.5 Beta 2中增加的,而我们用的是.NET Framework 3.0的Visual Studio 2005扩展,所以要手动添加。
如果不通过Ajax调用WCF,需要设置为:Factory =“ System.ServiceModel.Web.WebServiceHostFactory”。
5,开始第一次运行,访问http://localhost/AjaxWCFDemo/CNBlogsWCFService.svc,会出现如下页面:
6,继续运行,访问http://localhost/AjaxWCFDemo/CNBlogsWCFService.svc/js,您会看到自动生成访问WCF的客户端代理脚本。
7,OK!服务器端的WCF已经准备好了,下面就开始客户端的访问。
8,配置ASP.NET Ajax,在web.config中进行设置:
以下是引用片段:
<?xml version =“ 1.0”?> <配置> <appSettings /> <connectionStrings /> <system.web> <compilation debug =“ false”> <组件> <add assembly =“ System.Web.Extensions,Version = 3.5.0.0,Culture = neutral, PublicKeyToken = 31BF3856AD364E35“ /> </ assembly> </ compilation> <authentication mode =“表单” /> <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, 版本= 1.0.61025.0,文化=中性,PublicKeyToken = 31bf3856ad364e35” validate =“ false” /> </ httpHandlers> <httpModules> <add name =“ ScriptModule” type =“ System.Web.Handlers.ScriptModule, System.Web.Extensions,版本= 1.0.61025.0,文化=中性, PublicKeyToken = 31bf3856ad364e35“ /> </ httpModules> </system.web> </ configuration> |
注意:要设置为3.5版本的System.Web.Extensions,如果使用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, 文化=中性,PublicKeyToken = 31bf3856ad364e35“ Namespace =“ System.Web.UI” TagPrefix =“ asp”%> |
转变:
以下是引用片段:
<%@ Register Assembly =“ System.Web.Extensions,Version = 3.5.0.0, 文化=中性,PublicKeyToken = 31BF3856AD364E35” Namespace =“ System.Web.UI” TagPrefix =“ asp”%> |
2)添加调用WCF服务的代码,完整代码如下:
以下是引用片段:
<%@页面语言=“ C#” AutoEventWireup =“ true” CodeFile =“ Default.aspx.cs” Inherits =“ _ Default”%> <%@注册Assembly =“ System.Web.Extensions,版本= 3.5.0.0, 文化=中性,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演示</ title> </ head> <body> <form id =” form1“ runat =” server“> <div align =” center“ style =” margin-top:50px“> < asp:ScriptManager ID =“ ScriptManager1” runat =“ server”> <服务> <asp:ServiceReference Path =“〜/ CNBlogsWCFService.svc” /> </服务> </ asp:ScriptManager> <a href =“#” onclick =“ AddToFavorites('1','2')”>收藏</a> <br /> <br /> <span style =“ color:Red” id =“ Msg”> </ span> <script type =“ text / javascript”>函数AddToFavorites(blogID,postID){var wcf =新的www51csharp.com.ICNBlogsWCFService(); wcf.AddToFavorites(blogID,postID,OnSucceeded); }函数OnSucceeded(result){document.getElementById(“ Msg”)。innerHTML = result; } </ script> </ div> </ form> </ body> </ html> |
10,一切就绪,体验一下Ajax调用WCF的快乐!*伟13802269370 北京*微13802269370 *微13802269370 *电13802269370 北京*电13802269370 上海*微13802269370