Jquery Ajax访问WCF(JSON)

转载自http://bright895.blog.163.com/blog/static/182699233201271682847261/

 

WCF 服务:

一、IService1.CS

/*

    系统要引用System.ServiceModel.Web 

    ServiceContract属性把此类型公开在WCF服务中

    AspNetCompatibilityRequirements属性确保端点使用了WEBHTTP绑定模型.在接口的实现类上注解声明

    与webconfig中的<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />配合使用

    OperationContract属性把方法公开在WCF服务中

    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json

    声明传进来和返回去的数据类型为Json

   

    BodyStyle = WebMessageBodyStyle.WrappedRequest

    把参数包装一下,这样可以传递多个参数进来,

      

    BodyStyle=WebMessageBodyStyle.Bare

    未包装格式,输出的就是纯的Json格式。要在    

     * 

     */

    // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。

    [ServiceContract]

    public interface IService1

    {

         

        [OperationContract]

        [WebGet(ResponseFormat=WebMessageFormat.Json)]

        string Hello();

        [OperationContract]

        [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]

        string Request(int id, string title, string content);

        [OperationContract]

        [WebGet(ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Bare)]

        Member GetMember(int id);

        [OperationContract]

        [WebGet(ResponseFormat = WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedResponse)]

        List<Member> GetMemberList();

        [OperationContract]

        [WebGet(ResponseFormat = WebMessageFormat.Json)]

        Product GetProduct();

        [OperationContract]

        [WebGet(ResponseFormat = WebMessageFormat.Json)]

        DataSet GetProductSet();

        [OperationContract]

        [WebGet(ResponseFormat = WebMessageFormat.Json)]

        List<Product> GetProductList();

    }

    /// <summary>

    /// 此类证明不用 注解[DataContract]也可返回Json

    /// </summary>

    public class Product

    {

        string pro_no = "";

        string pro_name = "";

        decimal pro_price = 0;

        float pro_weight = 0;

        public string Pro_NO

        {

            get { return pro_no; }

            set { pro_no = value; }

        }

        public string Pro_Name

        {

            get { return pro_name; }

            set { pro_name = value; }

        }

        public decimal Pro_Price

        {

            get { return pro_price; }

            set { pro_price = value; }        

        }

        public float Pro_Weight

        {

            get { return pro_weight; }

            set { pro_weight = value; }        

        

        }

    

    }

    // 使用下面示例中说明的数据约定将复合类型添加到服务操作。

    [DataContract]

    public class Member

    {

        int id=0;

        string name = "";

        int age = 0;

        string birth = "";

        [DataMember]

        public int Id

        {

            get{return id;}

            set{id=value;}        

        }

        [DataMember]

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        [DataMember]

        public int Age

        {

            get { return age; }

            set { age = value; }

        }

        [DataMember]

        public string Birth

        {

            get { return birth; }

            set { birth = value; }        

        }

    }

 

 

二、Service1.svc.cs

// 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    public class Service1 : IService1

    {

        public string Hello()

        {

            return "Hello WCF";

        }

        public string Request(int id, string title, string content)

        {

            return string.Format("您输入的标题是:{0}您输入的内容是:{1}此文章的id是:{2}", title, content, id.ToString());

        }

        public Member GetMember(int id)

        {

            List<Member> memberList = new List<Member>();

            Member m1 = new Member { Id = 1, Name = "bright", Age = 24, Birth = "1989-01-01" };

            Member m2 = new Member { Id = 2, Name = "a", Age = 20, Birth = "1993-01-01" };

            Member m3 = new Member { Id = 3, Name = "b", Age = 21, Birth = "1992-01-01" };

            Member m4 = new Member { Id = 4, Name = "c", Age = 22, Birth = "1991-01-01" };

            Member m5 = new Member { Id = 5, Name = "d", Age = 23, Birth = "1990-01-01" };

            memberList.Add(m1);

            memberList.Add(m2);

            memberList.Add(m3);

            memberList.Add(m4);

            memberList.Add(m5);

            return memberList.Where(m => m.Id == id).ToList()[0];

        }

        public List<Member> GetMemberList()

        {

            List<Member> memberList = new List<Member>();

            Member m1 = new Member { Id = 1, Name = "bright", Age = 24, Birth = "1989-01-01" };

            Member m2 = new Member { Id = 2, Name = "a", Age = 20, Birth = "1993-01-01" };

            Member m3 = new Member { Id = 3, Name = "b", Age = 21, Birth = "1992-01-01" };

            Member m4 = new Member { Id = 4, Name = "c", Age = 22, Birth = "1991-01-01" };

            Member m5 = new Member { Id = 5, Name = "d", Age = 23, Birth = "1990-01-01" };

            memberList.Add(m1);

            memberList.Add(m2);

            memberList.Add(m3);

            memberList.Add(m4);

            memberList.Add(m5);

            

            return memberList;

        }

        public Product GetProduct()

        {

            Product pro1 = new Product { Pro_Name = "candy",Pro_NO="6978123456",Pro_Price=88.56M,Pro_Weight=6.8F };

            return pro1;        

        }

        public List<Product> GetProductList()

        {

            List<Product> proList = new List<Product>();

            

            Product pro1 = new Product { Pro_Name = "candy1", Pro_NO = "6978123451", Pro_Price = 88.51M, Pro_Weight = 6.8F };

            Product pro2 = new Product { Pro_Name = "candy2", Pro_NO = "6978123452", Pro_Price = 88.52M, Pro_Weight = 6.8F };

            Product pro3 = new Product { Pro_Name = "candy3", Pro_NO = "6978123453", Pro_Price = 88.53M, Pro_Weight = 6.8F };

            Product pro4 = new Product { Pro_Name = "candy4", Pro_NO = "6978123454", Pro_Price = 88.54M, Pro_Weight = 6.8F };

            Product pro5 = new Product { Pro_Name = "candy5", Pro_NO = "6978123455", Pro_Price = 88.55M, Pro_Weight = 6.8F };

            proList.Add(pro1);

            proList.Add(pro2);

            proList.Add(pro3);

            proList.Add(pro4);

            proList.Add(pro5);

            return proList;

        }

        /// <summary>

        /// 这样返回DataSet是不行的,得到的不是可利用的Json内容。可以将DataSet系列化成Json字符串再返回

        /// </summary>

        /// <returns></returns>

        public DataSet GetProductSet()

        {

            DataSet ds = new DataSet();

            DataTable dt = new DataTable();

            dt.Columns.Add("Pro_Name");

            dt.Columns.Add("Pro_NO");

            dt.Columns.Add("Pro_Price");

            dt.Columns.Add("Pro_Weight");

            for (int i = 0; i < 25; i++)

            {

                DataRow dr = dt.NewRow();

                dr[0] = "a";

                dr[1] = "6912345678"+i;

                dr[2] = 8.88M+i;

                dr[3] = 6.8F+i;

                dt.Rows.Add(dr);

            }

            ds.Tables.Add(dt);

            return ds;      

        }

    }

 

 

三、Web.config

 



<system.serviceModel>



<services>



<service name="TestWcfService.Service1" behaviorConfiguration="TestWcfService.Service1Behavior">



<!-- Service Endpoints -->



<endpoint address="" binding="webHttpBinding" contract="TestWcfService.IService1" behaviorConfiguration="TestWcfService.EndBehavior">



<!-- 



              部署时,应删除或替换下列标识元素,以反映



              在其下运行部署服务的标识。删除之后,WCF 将



              自动推导相应标识。



          -->



<!--<identity>



            <dns value="localhost"/>



          </identity>-->



</endpoint>



</service>



</services>



<behaviors>



<serviceBehaviors>



<behavior name="TestWcfService.Service1Behavior">



<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点-->



<serviceMetadata httpGetEnabled="true"/>



<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->



<serviceDebug includeExceptionDetailInFaults="false"/>



</behavior>



</serviceBehaviors>



<endpointBehaviors>



<behavior name="TestWcfService.EndBehavior">



<!--<enableWebScript/>--><!--为了输出纯的json而注释掉的-->



          <webHttp/>



</behavior>



</endpointBehaviors>



</behaviors>



</system.serviceModel>



 

 

 

客户端Asp.net WebForm1.aspx (与WCF在同个项目下面)

 

 



<script type="text/javascript" src="jquery-1.2.6.min.js"></script>



 



     id:<input type="text" id="id" />



    title:<input type="text" id="title" />



    content:<input type="text" id="content" />



    <input type="button" id="btn" onclick="call()"  value="Submit"/>



    



    <br />



   Get Single Member input member id(1~5):<input type="text" id="mid" />    



     <input type="button" id="Button1" onclick="getMember()"  value="Submit"/>



    



     <br />



    Get List: <input type="button" id="Button2" onclick="getMemberList()"  value="getMemberList"/>



   



   <br />    



    Single Product:<input type="button" id="Button3" onclick="getProduct()"  value="getProduct"/>



    <br />



    



    Get Product List:<input type="button" id="Button5" onclick="getProductList()"  value="getProductList"/>



    <br />



 



    DataSet:<input type="button" id="Button4" onclick="getProductSet()"  value="getProductSet"/>



     



     <script type="text/javascript">



        $.ajax({



            type:"get",



            url: "http://localhost:7000/Service1.svc/Hello",



            contentType: "application/json; charset=utf-8",            



            success: function (json) { alert(json) },



            error: function(error) {



                alert("调用出错" + error.responseText);



            }



 



        });



 



        function call(){



            var id = Number($("#id").val());



            var title = String($("#title").val());



            var content = String($("#content").val());



            $.ajax({



                type: "post",



                url: "http://localhost:7000/Service1.svc/Request",                



                data: '{"id":' + id + ',"title":"' + title + '","content":"' + content + '"}',



                contentType: "application/json; charset=utf-8",



                success: function(json) { alert(json) },



                error: function(error) {



                    alert("调用出错" + error.responseText);



                }



 



            });



        }



 



 



        function getMember() {



            var id = Number($("#mid").val());



            $.ajax({



                type: "get",



                url: "http://localhost:7000/Service1.svc/GetMember",



                data: {id:id},



                contentType: "application/json; charset=utf-8",



                success: function(json) { alert(json) },



                error: function(error) {



                    alert("调用出错" + error.responseText);



                }



 



            });



        }



 



        function getMemberList() {            



            $.ajax({



                type: "get",



                url: "http://localhost:7000/Service1.svc/GetMemberList",               



                contentType: "application/json; charset=utf-8",



                success: function(json) { alert(json) },



                error: function(error) {



                    alert("调用出错" + error.responseText);



                }



 



            });



        }



 



 



        function getProduct() {



            



            $.ajax({



                type: "get",



                url: "http://localhost:7000/Service1.svc/GetProduct",



                contentType: "application/json; charset=utf-8",



                success: function(json) { alert(json) },



                error: function(error) {



                    alert("调用出错" + error.responseText);



                }



 



            });



        }



 



        function getProductList() {



 



            $.ajax({



                type: "get",



                url: "http://localhost:7000/Service1.svc/GetProductList",



                contentType: "application/json; charset=utf-8",



                success: function(json) { alert(json) },



                error: function(error) {



                    alert("调用出错" + error.responseText);



                }



 



            });



        }



 



        function getProductSet() {



 



            $.ajax({



                type: "get",



                url: "http://localhost:7000/Service1.svc/GetProductSet",



                contentType: "application/json; charset=utf-8",



                success: function(json) { alert(json) },



                error: function(error) {



                    alert("调用出错" + error.responseText);



                }



 



            });



        }



    </script>

 

 

 

你可能感兴趣的:(jQuery ajax)