使用vs2010+WCF发布json数据,ExtJS4.0进行调用

花了近一天的时间调试解决,希望对有相同需要的朋友有帮助:

1、新建一空网站,添加一个web页面webform1.aspx,添加ExtJs相关引用

使用vs2010+WCF发布json数据,ExtJS4.0进行调用

< link href ="ExtJs4.0.7/resources/css/ext-all.css" rel ="stylesheet" type ="text/css" />
    < script src ="ExtJs4.0.7/bootstrap.js" type ="text/javascript" ></ script >

2、添加一个启用AJAX的WCF服务Service1.svc,如下图:

使用vs2010+WCF发布json数据,ExtJS4.0进行调用

3、修改web.config文件,将<enableWebScript />注释掉,换成<webHttp />,这一步很关键,

 

< system.serviceModel >
    < behaviors >
      < endpointBehaviors >
        < behavior name ="WcfAjaxDemo.Service1AspNetAjaxBehavior" >
          <!-- <enableWebScript /> -->
          < webHttp />
        </ behavior >
      </ endpointBehaviors >
    </ behaviors >
    < serviceHostingEnvironment aspNetCompatibilityEnabled ="true"
      multipleSiteBindingsEnabled
="true" />
    < services >
      < service name ="WcfAjaxDemo.Service1" >
        < endpoint address ="" behaviorConfiguration ="WcfAjaxDemo.Service1AspNetAjaxBehavior"
          binding
="webHttpBinding" contract ="WcfAjaxDemo.Service1" />
      </ service >
    </ services >
  </ system.serviceModel >

4、WCF中的方法前加上

[WebGet(RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json)],这一步也很关键,如下:

    [DataContract]
    public class treenode
    {
        [DataMember]
        public string id;
        [DataMember]
        public string text;
        [DataMember]
        public List<treenode> children = new List<treenode>();
        [DataMember]
        public string cls;
        [DataMember]
        public bool leaf;
    }
    [ServiceContract(Namespace = " WcfAjaxDemo ")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1
    {
        // 要使用 HTTP GET,请添加 [WebGet] 特性。(默认 ResponseFormat 为 WebMessageFormat.Json)
       
// 要创建返回 XML 的操作,
       
//      请添加 [WebGet(ResponseFormat=WebMessageFormat.Xml)],
       
//      并在操作正文中包括以下行:
       
//          WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        [OperationContract]
        [WebGet(RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json)]
        public treenode[] GetTree()
        {
            // 在此处添加操作实现
            treenode t = new treenode();
            t.id = " noe1 ";
            t.text = " 节点1 ";
            t.cls = " folder ";
            treenode t0 = new treenode();
            t0.id = " noe1_0 ";
            t0.text = " 节点1_0 ";
            t0.cls = " folder ";
            t0.leaf = true;
            t.children.Add(t0);
            treenode t1 = new treenode();
            t1.cls = " folder ";
            t1.id = " 000 ";
            t1.text = " 节点1 ";
            treenode t2 = new treenode();
            t2.id = " noe1_1 ";
            t2.text = " 节点1_1 ";
            t2.cls = " folder ";
            t2.leaf = true;
            t1.children.Add(t2);
            List<treenode> nodes = new List<treenode>();
            nodes.Add(t);
            nodes.Add(t1);
            return nodes.ToArray();
        }
        // 在此处添加更多操作并使用 [OperationContract] 标记它们
    }

在IE地址栏里输入http://localhost:18564/Service1.svc/GetTree,测试WCF是否正常,正常会提示文件下载,用记事本打开后显示如下:

[{"children":[{"children":[],"cls":"folder","id":"noe1_0","leaf":true,"text":"节点1_0"}],"cls":"folder","id":"noe1","leaf":false,"text":"节点1"},{"children":[{"children":[],"cls":"folder","id":"noe1_1","leaf":true,"text":"节点1_1"}],"cls":"folder","id":"000","leaf":false,"text":"节点1"}]

如果不正常会出现如下提示,请检查第3、4步

使用vs2010+WCF发布json数据,ExtJS4.0进行调用

5、客户端使用ExtJs调用生成树TreePanel

<% @ Page Language = " C# " AutoEventWireup = " true " CodeBehind = " WebForm1.aspx.cs " Inherits = " WcfAjaxDemo.WebForm1 " %>

<! 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 ></ title >
    < link href ="ExtJs4.0.7/resources/css/ext-all.css" rel ="stylesheet" type ="text/css" />
    < script src ="ExtJs4.0.7/bootstrap.js" type ="text/javascript" ></ script >
    < script type ="text/jscript" >
        Ext.require([
' * ' ]);

        Ext.onReady(
function () {
           
var store = Ext.create( ' Ext.data.TreeStore ' , {
                proxy: {
                    type:
' ajax ' ,
                    url:
' Service1.svc/GetTree '
                },
                root: {
                    text:
' Ext JS ' ,
                    id:
' src ' ,
                    expanded:
true
                },
                folderSort:
true ,
                sorters: [{
                    property:
' text ' ,
                    direction:
' ASC '
                }]
            });

           
var tree = Ext.create( ' Ext.tree.Panel ' , {
                id:
' tree ' ,
                store: store,
                width:
250 ,
                height:
300 ,
                viewConfig: {
                    plugins: {
                        ptype:
' treeviewdragdrop ' ,
                        appendOnly:
true
                    }
                },
                renderTo: document.body
            });
        });
   
</ script >
</ head >
< body >
    < form id ="form1" runat ="server" >
    </ form >
</ body >
</ html >

6、运行webform1.aspx如下图:

使用vs2010+WCF发布json数据,ExtJS4.0进行调用

你可能感兴趣的:(Extjs4.0)