Here is the service Interface for the service which queries Shows for a particular venue. It includes a data contract for for a class that allows us to combine fields from Show and ShowData.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService" in both code and config file together.
[ServiceContract]
public interface IService
{
[OperationContract]
List<ShowInfo> GetShowsByVenue(string venueName);
}
[DataContract]
public class ShowInfo
{
[DataMember]
public string ArtistName { get; set; }
[DataMember]
public string ShowName { get; set; }
[DataMember]
public string ShowDate { get; set; }
[DataMember]
public string ShowTime { get; set; }
[DataMember]
public string TicketInfo { get; set; }
}
Here is the code for the query itself
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service" in code, svc and config file together.
public class Service : IService
{
ShowTrackerEntities db = new ShowTrackerEntities();
public List<ShowInfo> GetShowsByVenue(string venueName)
{
var shws = from s in db.Shows
from d in s.ShowDetails
where s.Venue.VenueName.Equals(venueName)
select new
{
d.Artist.ArtistName,
s.ShowName,
s.ShowTime,
s.ShowDate,
s.ShowTicketInfo
};
List<ShowInfo> shows = new List<ShowInfo>();
foreach(var sh in shws)
{
ShowInfo sInfo = new ShowInfo();
sInfo.ArtistName = sh.ArtistName;
sInfo.ShowName = sh.ShowName;
sInfo.ShowDate = sh.ShowDate.ToShortDateString();
sInfo.ShowTime = sh.ShowTime.ToString();
shows.Add(sInfo);
}
return shows;
}
}
Now here is the ASP code for the simple web page client. We first had to make a reference to the service. Also we used a text box to enter the venue name. It should be a drop down list.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Get Shows" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
And here is the code behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//Instantiate the service client so we have access to the serivce
ServiceReference1.ServiceClient sc = new ServiceReference1.ServiceClient();
//create an array and assign it the result of the service query
ServiceReference1.ShowInfo[] shows = sc.GetShowsByVenue(TextBox1.Text);
//bind the array to the DataGrid
GridView1.DataSource = shows;
GridView1.DataBind();
}
}