javascript调用WCF服务

转载 2011年01月13日 17:04:00

在 ASP.NET AJAX 框架中,如果需要用 javascript 调用 WebService 或者调用 PageMethod 都是很容易实现的,主要是通过ScriptManager服务器控件协调脚本资源,生成客户端代理,实现对服务器端的访问,当然不使用ScriptManager控件,而直接用javascript或者js框架jQuery也是很容易来调用WebService的,那么javascript可以对wcf服务进行调用吗?答案是肯定的!接下来我们就演示js与wcf是如何进行通讯的。
第一步:建立一个web项目

然后在这个项目中建立一个.svc 的WCF服务框架。

vs自动生成三个文件:Service1.svc、Service1.svc.cs 、IService1.cs,且Web.config中也被自动添加了

<system.serviceModel /> 节点。

为了能在wcf服务中启用ajax,我们必须对Web.config中生成的wcf节点部分做一点修改,修改后的节点内容如下:
 <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="test_js_wcf.Service1Behavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
      <service name="test_js_wcf.Service1">
        <endpoint behaviorConfiguration="test_js_wcf.Service1Behavior" address="" binding="webHttpBinding"

               contract="test_js_wcf.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
      </service>
    </services>
  </system.serviceModel>

第二步:构建wcf服务

IService1.cs 文件代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace test_js_wcf
{
    [ServiceContract(Namespace = "Valsun", Name = "Service1")]
    public interface IService1
    {
        [OperationContract]
         Dictionary<string,string> GetTestList(string id);
    }
}

Service1.svc 文件代码:

<%@ ServiceHost Language="C#" Debug="true" Service="test_js_wcf.Service1" CodeBehind="Service1.svc.cs" %>
Service1.svc.cs 文件代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

using System.ServiceModel;
using System.ServiceModel.Activation;
namespace test_js_wcf
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 : IService1
    {
        public Dictionary<string, string> GetTestList(string id)
        {
            // 定义一个字典对象
            Dictionary<string, string> dic = new Dictionary<string, string>();

            // 方便测试,直接构造一些数据来模拟数据库中的数据
            dic.Add("1" + id, "上海");
            dic.Add("2" + id, "北京");
            dic.Add("3" + id, "广州");
            dic.Add("4" + id, "深圳");
            dic.Add("5" + id, "南京");

            // 返回值
            return dic;
        }
    }
}

第三步:建立一个.aspx 页面来调用wcf服务

<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/Service1.svc" />
        </Services>
    </asp:ScriptManager>
    <div>
        <asp:DropDownList ID="ddl" runat="server" Width="200">
            <asp:ListItem Text="1" Value="1"></asp:ListItem>
            <asp:ListItem Text="2" Value="2"></asp:ListItem>
            <asp:ListItem Text="3" Value="3"></asp:ListItem>
        </asp:DropDownList>
        <br />
        <br />
        <input id="btnQueryDictionary" type="button" value="测试" onclick="btnQuery();" />
        <br />
        <br />
        <asp:Label ID="lblMsg" runat="server" Text=""></asp:Label>
    </div>
    </form>
</body>
<script language="javascript" type="text/javascript">
    function btnQuery() {
        var ddl = $get('<%=ddl.ClientID %>');
        var id = ddl.options[ddl.selectedIndex].value;
        var wcfProxy = new Valsun.Service1();
        wcfProxy.GetTestList(id, OnSucceededCallback, OnFailedCallback);
    }
    function OnSucceededCallback(result, userContext, methodName) {
        if (methodName == "GetTestList") {
            var msg = "";
            // 注意这里的访问方式!!!
            for (var key in result) {
                msg += result[key].Key + " : " + result[key].Value + "/n";
            }
            $get('<%=lblMsg.ClientID%>').innerText = msg;
        }
    }
    function OnFailedCallback(error, userContext, methodName) {
        alert("异常信息:" + error.get_message() + "/n" +
              "异常类型:" + error.get_exceptionType() + "/n" +
              "堆栈信息:" + error.get_stackTrace());
    }
</script>

测试通过!代码不用多解释,看看大概就知道意思了,这只是一个入门示例,更深入的应用稍后讲解。

【菜鸟学WCF】使用js+ajax调用WCF以及返回数据类型的控制

先上代码,再谈问题。 HTMLPage1.htm
  • ZAIJIANLUOYE110
  • ZAIJIANLUOYE110
  • 2014年05月09日 09:16
  • 2043

使用js+ajax调用WCF服务

  • 2014年05月09日 09:21
  • 17KB
  • 下载

一个WCF服务开发与调用的完整示例

开发工具:VS2008 开发语言:C# 开发内容:简单的权限管理系统 第一步、建立WCF服务库 点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IService1.cs和Ser...
  • sinat_15155817
  • sinat_15155817
  • 2017年02月24日 17:41
  • 214

javascript调用WCF服务

在 ASP.NET AJAX 框架中,如果需要用 javascript 调用 WebService 或者调用 PageMethod 都是很容易实现的,主要是通过ScriptManager服务器控件协调...
  • chengly0129
  • chengly0129
  • 2011年01月13日 17:04
  • 2404

Ajax跨域调用WCF的实现

最近需要实现通过ajax去和wcf服务端进行交互,之前也接触过wcf,但是并不是很熟悉,相信这个问题难道了不少人,而网上说的大都比较笼统,就我来说,看了也是知道个大概,想要根据上面说的去实现还要费一番...
  • huangli321456
  • huangli321456
  • 2016年05月20日 15:11
  • 2596

C#代码直接调用WCF服务

public string GetResult(string inputmodel) { string modelstring = null; ...
  • pengdayong77
  • pengdayong77
  • 2016年04月29日 18:42
  • 1347

WCF客户端调用服务

WCF客户端主要提供两方面的功能。一方面,将客户端服务调用请求从方法调用形式转换为消息形式,并将编码后的消息通过相应的传输协议发送到服务端;另一方面,对从传输层接受的回复消息进行解码转换成消息对象,并...
  • pan_junbiao
  • pan_junbiao
  • 2013年04月30日 16:25
  • 3596

Java客户端调用WCF服务

一.如何判断接口用的是WCF服务的打开别人给你的接口地址(WSDL) 里面有svcutil.exe 就是WCF二.在eclipse中安装axis2插件1.原因: 为什么安装axis2插件,为了...
  • u011008029
  • u011008029
  • 2016年05月04日 14:06
  • 2696

java调用WCF服务

一、概述最近项目上有需要和建科机器进行通信的需求,而建科这边给的技术文档和服务都是webservice的,我这边要做的就是用Java和建科的webservice交互。 启动建科的webservice...
  • chenzheng8975
  • chenzheng8975
  • 2017年09月28日 15:03
  • 768

采用axis2方式Java客户端调用WCF服务端Web Service

首先确保WebService服务开启,如下图:
  • yangshijin1988
  • yangshijin1988
  • 2014年08月13日 22:28
  • 2537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript调用WCF服务
举报原因:
原因补充:

(最多只允许输入30个字)