[CLOSED] How to get Jason request from WebService

  1. #1

    [CLOSED] How to get Jason request from WebService

    I have such code:



    <ext:Store ID="StoreProjects" runat="server">
        <Proxy>
            <ext:HttpProxy Method="POST" Url="Services/CrossData.asmx/GetEmploees"/>
        </Proxy>
        <Reader>
            <ext:XmlReader Record="Employer" ReaderID="ID">
                <Fields>
                    <ext:RecordField Name="ID" />
                    <ext:RecordField Name="Name" />
                </Fields>
            </ext:XmlReader>
        </Reader>
    </ext:Store>
    Web service returns data as XML and XmlReader read it. What I need to do, to get JSON instead of XML from Web Service to make my code like:
    <ext:Store ID="StoreProjects" runat="server">
        <Proxy>
            <ext:HttpProxy Method="POST" Url="Services/CrossData.asmx/GetEmploees"/>
        </Proxy>
        <Reader>
            <ext:JsonReader ReaderID="ID">
                <Fields>
                    <ext:RecordField Name="ID" />
                    <ext:RecordField Name="Name" />
                </Fields>
            </ext:JsonReader>
        </Reader>
    </ext:Store>
  2. #2

    RE: [CLOSED] How to get Jason request from WebService

    Hi,

    1. Add System.Web.Script.Services.ScriptService attribute to your web service
    2. Add header to your store's proxy (please update from SVN first, we have fixed one bug related with Headers)
          <Headers>
                <ext:Parameter Name="Content-Type" Value="application/json; charset=utf-8" Mode="Value"/>
          </Headers>
    3. Add Root="d" to your JsonReader. The "d" is a security feature that came with 3.5.

    Page
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Collections.Generic"%>
    
    <%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
    <!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 id="Head1" runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <ext:ScriptManager ID="ScriptManager1" runat="server" />
            
            <ext:Store ID="StoreProjects" runat="server">
                <Proxy>
                    <ext:HttpProxy Method="POST" Url="CrossData.asmx/GetEmploees">
                        <Headers>
                            <ext:Parameter Name="Content-Type" Value="application/json; charset=utf-8" Mode="Value"></ext:Parameter>
                        </Headers>
                    </ext:HttpProxy>
                </Proxy>
                <Reader>
                    <ext:JsonReader ReaderID="ID" Root="d">
                        <Fields>
                            <ext:RecordField Name="ID" />
                            <ext:RecordField Name="Name" />
                        </Fields>
                    </ext:JsonReader>
                </Reader>
            </ext:Store>
            
            <ext:GridPanel ID="GridPanel1" 
                runat="server" 
                StoreID="StoreProjects" 
                Title="Grid" 
                Width="600" 
                Height="290"
                AutoExpandColumn="Name">
                <ColumnModel ID="ColumnModel1" runat="server">
                    <Columns>
                        <ext:Column Header="ID" Width="160" Sortable="true" DataIndex="ID" />
                        <ext:Column ColumnID="Name" Header="Name" Width="75" Sortable="true" DataIndex="Name"/>
                    </Columns>
                </ColumnModel>            
                <LoadMask ShowMask="true" />            
            </ext:GridPanel>
        </form>
    </body>
    </html>
    WebService
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Services;
    using System.Web.Services;
    
    namespace Coolite.Sandbox.Temp.AjaxEvents
    {
        /// <summary>
        /// Summary description for CrossData
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        [System.Web.Script.Services.ScriptService]
        public class CrossData : System.Web.Services.WebService
        {
            [WebMethod]
            public List<object> GetEmploees()
            {
                return new List<object>{new {ID = 1, Name ="Name1"}, new {ID = 2, Name ="Name2"}, new {ID = 3, Name ="Name3"}};
            }
        }
    }
  3. #3

    RE: [CLOSED] How to get Jason request from WebService



    This works fine, now I wanted to send input paremeter into WebService WebMethod, I have the following code:

    
    *   <ext:Store ID="StoreDocuments" runat="server" OnRefreshData="StoreDocuments_Refresh">
    *       <Proxy>
    *           <ext:HttpProxy Method="POST" Url="Services/MyWebService.asmx/GetDocuments">
    *               <Headers>
    *                   <ext:Parameter Name="&amp;quot;Content-Type&amp;quot;" Value="application/json; charset=utf-8"
    *                       Mode="Value" />
    *               </Headers>
    *           </ext:HttpProxy>
    *       </Proxy>
    *       <Reader>
    *           <ext:JsonReader Root="d" ReaderID="DocuementName">
    *               <Fields>
    *                   <ext:RecordField Name="DocuementName" />
    *                   <ext:RecordField Name="Language" />
    *                   <ext:RecordField Name="DocumentProgress" />
    *                   <ext:RecordField Name="DocumentStatus" />
    *                   <ext:RecordField Name="Deadline" Type="Date" />
    *                   <ext:RecordField Name="DocumentDescription" />
    *               </Fields>
    *           </ext:JsonReader>
    *       </Reader>
    *       <BaseParams>
    *           <ext:Parameter Name="ProjectID" Value="#{ProjectsGridPanel}.getSelectionModel().hasSelection() ? #{ProjectsGridPanel}.getSelectionModel().getSelected().id : -1"
    *               Mode="Raw" />
    *       </BaseParams>
    *       <Listeners>
    *           <LoadException Handler="Ext.Msg.alert('Products - Load failed', e.message || response.statusText);" />
    *       </Listeners>
    *   </ext:Store>
    *

    I've tryed to send input parameter "ProjectID" by BaseParames tag. The problem is that parameter is sent by plain text like "ProjectID=-1" and MS WebService cannot convert it into input WebMethod parameter.

    WebMethod looks like:

    
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.*
    [System.Web.Script.Services.ScriptService]
    public class MyWebService: System.Web.Services.WebService
    {
    *[WebMethod]
    *public Document[] GetDocuments(int ProjectID)
    *{
    ********// ...
    *}
    }
  4. #4

    RE: [CLOSED] How to get Jason request from WebService

    Hi,

    We have added Json property to the HttpProxy. So, just set Json="true" for working with script web services.*


    <ext:HttpProxy Url="CrossData.asmx/GetEmploees" Json="true"/>
    *


    Please update from SVN

Similar Threads

  1. Replies: 7
    Last Post: Nov 29, 2011, 7:07 AM
  2. [CLOSED] [1.2] Force request from WebService-ComboBox
    By FVNoel in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Nov 22, 2011, 12:35 PM
  3. Help with WebService and Ext.net
    By xborderland in forum 1.x Help
    Replies: 3
    Last Post: Aug 11, 2011, 11:50 AM
  4. [CLOSED] DirectMethods.Request+webservice
    By farisqadadeh in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: May 06, 2011, 7:13 AM
  5. Replies: 10
    Last Post: Apr 30, 2010, 5:42 PM

Posting Permissions