WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens Hozzunk létre egy ASP.NET Empty Web Site projektet! A projekt neve legyen WCFAPP1. Ez lesz a Solution neve is. Egyelőre erre nem lesz szükségünk majd a WCF service elkészítése után majd bővítjük.. WCF Service A Solution-höz adjunk hozzá új projektként egy WCF Service Application-t. A neve most FirstWcfService lesz. 1
Töröljük az IService.cs és a Service1.svc fájlokat. 2
Adjunk hozzá ehhez a projekthez egy új WCF service-t. ServiceFirst néven. 3
4
Adatbázis Készítsünk egy egyszerű adatbázist (1 tábla) A beadandóhoz ennél azért összetettebb kell.. SQL Server-t most kihagyva. Nekem nem sikerült telepítenem. Ha van működő SQL server ott is lehet, management studio, stb. Adjunk hozzá a projekthez egy SQL Server Database-t. Ez egy mdf file, neve legyen DatabaseFirst.mdf. Dupla kattintás az mdf file-on Server Explorer Hozzunk létre egy táblát, az alábbi mezőkkel a Tábla neve egyszerűen maradhat Table :-D 5
Update!!! Töltsük fel pár rekorddal.. (Show Table Data) 6
Készítsék el a modellt.. Adjanak a projekthez egy új elemet.. ADO.NET Entity Data Model Neve ModelFirst :-D 7
VS 2013-ban Generate from database 8
9
Ezzel elkészültünk a db modell réteggel.. 10
Módosítsuk a ServiceFirst.svc file-t namespace FirstWcfService // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IServiceFirst" in both code and config file together. [ServiceContract] public interface IServiceFirst [OperationContract] Table find(int id); [OperationContract] List<Table> findall(); ServiceFirst.svc.cs file Töröljük a Dowork metódust.. majd jobb klikk.. és implementáljuk az interface-t.. (következő képek) 11
Módosítsuk az alábbiaknak megfelelően public class ServiceFirst : IServiceFirst private DatabaseFirstEntities dfe = new DatabaseFirstEntities(); public Table find(int id) return dfe.table.single(p => p.id == id); public List<Table> findall() return dfe.table.tolist(); 12
Állítsuk be ezt a projektet kezdő projektnek.. Startup.. Majd Run.. 13
Mentsük ki egy dokumentumba az svcutil.exe utáni címet.. A klienseknél szükség lesz majd rá.. http://localhost:58443/servicefirst.svc?wsdl 14
ASP.NET kliens Állítsuk be most ezt a projektet a kezdőnek. Adjunk hozzá egy Web form-ot.. Default.apsx Default.aspx - set as a start page Adjuk hozzá a szerviz referenciát.. Add service reference Address mezőbe másoljuk be az előzőleg mentett elérési utat!!! wsdl 15
Default.aspx, design nézet.. Húzzunk rá egy GridView-t 16
View code.. using!!! using ServiceReferenceFirst; vagy using WCFAPP1.ServiceReferenceFirst; protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) ServiceReferenceFirst.ServiceFirstClient sfc = new ServiceFirstClient(); this.gridviewfirst.datasource = sfc.findall().select(p => new id = p.id, name = p.name, cost = p.noname ).ToList(); this.gridviewfirst.databind(); Próbáljuk ki!!!! 17
Bővítsük az oldalt.. protected void Button1_Click(object sender, EventArgs e) try ServiceReferenceFirst.Table p = this.sfc.find(convert.toint32(this.textbox1.text)); this.label3.text = p.name; this.label4.text = p.noname.value.tostring(); 18
catch Teljes kód ellenőrzéshez using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ServiceReferenceFirst; public partial class _Default : System.Web.UI.Page ServiceReferenceFirst.ServiceFirstClient sfc = new ServiceFirstClient(); protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) this.gridviewfirst.datasource = sfc.findall().select(p => new id = p.id, name = p.name, cost = p.noname ).ToList(); this.gridviewfirst.databind(); protected void Button1_Click(object sender, EventArgs e) try ServiceReferenceFirst.Table p = this.sfc.find(convert.toint32(this.textbox1.text)); this.label3.text = p.name; this.label4.text = p.noname.value.tostring(); catch Próbálja ki!! 19
20
Adjunk a WCFAPP1 solution-höz egy WPF app-ot.. WPF kliens XAML kód <Grid> <DataGrid x:name="datag" Loaded="dataG_Loaded" /> </Grid> Mint az előbb.. Add new service reference 21
Ennek most más nevet adtam.. teljesen mind1 egyébként.. using WpfApp1.ServiceReferenceSecond; using WpfApp1.ServiceReferenceSecond; namespace WpfApp1 /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window ServiceFirstClient sfc = new ServiceFirstClient(); public MainWindow() InitializeComponent(); private void datag_loaded(object sender, RoutedEventArgs e) this.datag.itemssource = sfc.findall().select(p => new id = p.id, name = p.name, cost = p.noname.value ).ToList(); 22
F5 :-D 23