This is a migrated thread and some comments may be shown as answers.

Web Service Data Source not connecting

3 Answers 221 Views
ClientDataSource
This is a migrated thread and some comments may be shown as answers.
Mary
Top achievements
Rank 1
Mary asked on 24 Apr 2018, 05:29 AM

Good afternoon,

I am trying to connect a RadClientDataSource to a web Service but it is not getting called (I know because i am tracing the sql database that it uses and I have tried with breakpoints). At present the code is:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPageSingleMenu.Master" AutoEventWireup="true" CodeFile="Grid.aspx.cs" Inherits="Grid" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <link href="styles/grid.css" rel="stylesheet" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2" runat="Server">
       <telerik:RadGrid RenderMode="Lightweight" ID="dgSessions" runat="server" AutoGenerateColumns="false"  AllowSorting="true"
              EnableHeaderContextMenu="true"  ClientDataSourceID="RadClientDataSource1" 
          AllowMultiRowSelection="false"  >
           
            <MasterTableView Width="100%" ClientDataKeyNames="SessionKey" DataKeyNames="SessionKey" CommandItemDisplay="None">
                
                <Columns>
                
                    <telerik:GridBoundColumn UniqueName="HorseName" HeaderText="Horse" DataField="HorseName" ReadOnly="True">
                    </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="BT200" HeaderText="BT200" DataField="BT200" ReadOnly="True">
                    </telerik:GridBoundColumn>

                </Columns>
            </MasterTableView>
        </telerik:RadGrid>
    <telerik:RadClientDataSource ID="RadClientDataSource1" runat="server">
            <DataSource>
                <WebServiceDataSourceSettings ServiceType="OData" >
                    <Select Url="http://localhost:49833/ETSession.svc/GetSessions" DataType="JSON" />
                </WebServiceDataSourceSettings>
            </DataSource>
            <Schema>
                <Model ID="SessionKey">
                    <telerik:ClientDataSourceModelField FieldName="SessionKey" />
                    <telerik:ClientDataSourceModelField FieldName="HorseName" DataType="String" />
                    <telerik:ClientDataSourceModelField FieldName="BT200" />
                </Model>
            </Schema>
        </telerik:RadClientDataSource>
</asp:Content>

I have tried with a remote web service, also with the web service code file in the same project as the page, but to no avail.

I have also tried the follwing snippet:

<WebServiceDataSourceSettings ServiceType="OData" BaseUrl="http://localhost:49833/ETSession.svc/" >
                    <Select Url="GetSessions" DataType="JSON" />
                </WebServiceDataSourceSettings>

This results in GetSessions giving a Not Found indicator (green squigly line under the name) - that occurs in all three scenarios (remote, local or in-place).

The service works as i have tested it from another project.

Using VS2010 and .Net 4

 

Would welcome any thoughts.

Mary

3 Answers, 1 is accepted

Sort by
0
Marin Bratanov
Telerik team
answered on 26 Apr 2018, 10:49 AM
Hello Mary,

Can you try the following changes to mimic our online demo (https://demos.telerik.com/aspnet-ajax/grid/examples/data-binding/client-side/client-data-source-binding/defaultcs.aspx):

  • make the base URL relative so the browser will fill in the port and protocol and the path to the web application, in case there is a mismatch there
  • remove the ServieType=OData setting especially if the response is JSON (which is the most common scenario)

The idea is to have this:

<WebServiceDataSourceSettings BaseUrl="ETSession.svc/">
    <Select Url="GetSessions" DataType="JSON" />
</WebServiceDataSourceSettings>

The next thing to do is to monitor the browser console (or use a tool like Fiddler) to examine the network traffic to see what is going on with the request. For example, it may be getting blocked by a firewall/anitvirus, or IIS may be throwing an error before reaching your managed code. The following blog shows how to do that, among other things: https://www.telerik.com/blogs/improve-your-debugging-skills-with-chrome-devtools#inspect-network-requests.

That said, the grid can also read data from various services without a RadClientDataSource, so you may want to take a look at that as well: https://demos.telerik.com/aspnet-ajax/grid/examples/data-binding/client-side/declarative/defaultcs.aspx.

The final option I can suggest is that you fetch the data with your own code (like jQuery.get()) and provide it to the grid as a simple array of objects: https://demos.telerik.com/aspnet-ajax/grid/examples/data-binding/client-side/programmatic/defaultcs.aspx.

I hope this information helps you either troubleshoot the current setup, or implement another one that fits your needs. If not, I will need you to open a ticket and send us a small runnable example that showcases the problem so we can investigate.


Regards,
Marin Bratanov
Progress Telerik
Try our brand new, jQuery-free Angular components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
0
Mary
Top achievements
Rank 1
answered on 06 May 2018, 06:55 AM

Thanks Marin,

I have changed tack now - my goal is to have json data retrieved then stored locally and turned into a datasource for a rad grid and rad chart. I can get the json string easily in client script (java script) but am unable to set the datasource of the rad grid (the first thing I am trying).

The examples are for the kendo grid and I do not think they work in this case. My latest attempt is:

var grid = $find("<%= dgSessions.ClientID %>");
                var dataSource = new kendo.data.DataSource({ data: res });
                var tableView = grid.get_masterTableView();
                tableView.set_dataSource(dataSource);
                tableView.dataBind();

I know the res data is good, well formed json as I can see it with an alert - but how do I make it the data source for the grid?

0
Mary
Top achievements
Rank 1
answered on 07 May 2018, 12:27 AM

GOT IT!!!!

function CallSuccess(res) {
            try {
                var grid = $find("<%= dgSessions.ClientID %>");
                var tableView = grid.get_masterTableView();
                tableView.set_dataSource(JSON.parse(res));
                tableView.dataBind();

 

where res is the JSON string

Tags
ClientDataSource
Asked by
Mary
Top achievements
Rank 1
Answers by
Marin Bratanov
Telerik team
Mary
Top achievements
Rank 1
Share this question
or