使用ASP.NET AJAX调用WCF服务项模板

开发 后端
本文将讲述如何使用ASP.NET AJAX调用WCF服务项模板,让您对WCF和AJAX有一个更加深入的了解。希望本文对您有所帮助。

开发平台

1.Visual Studio 2008 SP1

2..NET Framework 3.5 SP1

3.ASP.NET AJAX

4.IIS 7或者VS 集成Web服务器 [WCF 和 SVS 文件配置]

5.Windows Vista

介绍

WCF (Windows Communication Foundation)中新增了很多特性来加强微软应用程序开发平台,尤其是在应用程序之间的通信上。在本篇文章 中,我们讲了解到WCF是如何直接在客户端JavaScript中使用的场景。这是由ASP.NET AJAX提供的一项非常酷的特性。在本篇文章中,我们 不 会对WCF的内部细节加以大量讨论,而是讲主要精力放在如何在JavaScript中直接使用服务。因此,我们在幕后不会对ASP.NET或者.NET运行时 是如何管理这些功能的特性进行探讨。

为了演示文中涉及的理论与事实,我们讲创建一个带有两个工程的解决方案。因此,不浪费时间了,开始创建一个空白的解决方案并保存起 来。现在,添加一个新的类库项目到解决方案中。命名该类库为ServiceLibrary。然后,添加一个Web应用程序工程到该解决方案中并命名为 WEBUI。后面我们将看到有两种方式添加能够让JavaScript调用的WCF服务。

1.使用启用AJAX的WCF服务项模板

2.在类库中使用服务接口定义

使用启用AJAX的WCF服务项模板

这里,我们将看到一种简单明了的方式在JavaScript中调用一个WCF服务 。右键点击Web应用程序工程并选择添加新项。选择启用AJAX的WCF服务项模板,并命名为“HelloWorldService.svc” 最后点击确定。此时, 向导会如愿添加一个HelloWorldService.svc文件到解决方案中。该文件也提供了代码分离页面。如果你在一个XML文件编辑器中打开了该文件 ,你将看到如下形式的标签:

<%@ ServiceHost Language="C#" Debug="true"
Service="WebUI.HelloWorldService" CodeBehind="HelloWorldService.svc.cs" %>

如果你打开后台代码文件,将看到如下形式的代码:

namespace WebUI
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class HelloWorldService
{
[OperationContract]
public void DoWork()
{
return;
}
}
}

VS 2008会自动为你在web.config文件中添加一些必要的配置,因此不需要手工在web.config文件中添加任何配置。现在,继续并添加一个 HelloWorld()方法,该方法返回一个“HelloWorld”的字符串并为该方法添加一个[OperationContract]特性。在本篇文章的后面我们将解释该 特性。

现在,为Web应用程序工程添加一个页面并命名它为“HelloWorldTest.aspx”。从Visual Studio工具箱中拖拽一个Script Manager项到页 面上。在ScriptManager 标签内部,添加一个到该服务的引用。下面给出了该代码示例:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="~/HelloWorldService.svc" />
    </Services>
</asp:ScriptManager>

现在,添加一个button按钮和一个textbox文本框到页面上,并为该按钮添加点击事件处理程序,以使用JavaScript函数来调用服务。当你 编写服务调用函数时,Visual Studio 2008 HTML编辑器将提供智能感知功能以方便编写必要的函数调用。完整的HTML代码如下所示:

<form id="form1" runat="server">
<div>
    <script language="javascript" type="text/javascript">
        function GetValueFromServer() {
            HelloWorldService.HelloWorld(onSuccess, onFailure);
        }
        function onSuccess (result) {
            document.getElementById ('txtValueContainer').value = result;
        }

        function onFailure(result) {
            window.alert (result);
        }
    </script>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/HelloWorldService.svc" />
        </Services>
    </asp:ScriptManager>
    <input id="btnServiceCaller" type="button" value="Get Value"
           onclick="GetValueFromServer()"; />
    <input id="txtValueContainer" type="text" value="" />
</div>
</form>

注意,当调用服务时,我们传递了两个方法:一个用于进行回调而另一个用于错误回调。如果我们需要传递任何参数到该函数中,这些参数 会首先传递进去然后再进行回调。

因此,如果我们有一个名为getvalue 的函数并接收两个字符串参数,那么我们将以[NameSpaceName].[ServiceName].getvalue(“value one”,”value two”,on_success,on_error);的方式调用该函数,此刻on_success和on_error各自表示回调和错误回调。

【编辑推荐】

  1. 技术高手讲评ASP.NET MVC 1.0
  2. ASP.NET十个有效性能优化的方法
  3. 详解AJAX在ASP.NET中的实现方式
责任编辑:彭凡 来源: IT168
相关推荐

2009-07-20 17:39:36

WCF服务ASP.NET AJA

2009-07-27 17:54:39

WCF服务ASP.NET

2009-07-21 09:53:55

ASP.NET AJAWCF服务

2010-02-26 10:30:03

ASP.NET Aja

2009-12-08 16:59:52

WCF服务

2009-04-21 09:37:50

ASP.NETAjaxJavaScript

2009-07-27 17:38:30

WCF服务ASP.NET 3.5

2009-07-20 17:59:07

JavaScript调ASP.NET AJA

2010-03-02 16:58:11

AJAX WCF服务项

2009-07-27 17:51:58

WCF服务ASP.NET

2009-07-22 16:05:34

ASP.NET AJA

2009-07-24 13:41:15

ASP.NET AJA

2009-07-22 16:11:43

ASP.NET AJA

2009-07-22 16:25:41

ASP.NET AJA

2009-07-22 16:17:39

ASP.NET AJA

2009-07-27 09:07:04

Profile SerASP.NET AJA

2009-07-27 17:46:42

WCF服务ASP.NET应用程序

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-07-20 10:16:13

配置ASP.NET A

2009-07-22 15:58:52

ASP.NET AJA
点赞
收藏

51CTO技术栈公众号