» »

Izdelovanje REST API-ja za povezavo UWP aplikacije

Izdelovanje REST API-ja za povezavo UWP aplikacije

BivšiUser2 ::

Kreiral sem Class ter generiral Controller za ASP aplikacijo sedaj pa ne vem kako naprej. Na remote serverju imam podatkovno bazo s tabelami. Tip na videu
youtube.com/watch?v=PfnAqfgsvFc
kaže kako lokalno narediti tabele, mene pa zanima kako deployati to aplikacijo na remote server ter jo povezati z bazo in tabelami v njej. Prav tako imam že napisano večino aplikacije. Kako torej povezati vse to skupaj?
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Sem se odločil poizskusiti tudi z PHP-jem (z C# pa bi dol potegnil string) pa nevem zakaj ne gre. Paket php-json je nameščen, verzija IIS je 7, PHP pa 5.3. Razlog, da
Index.php
<?php
	$id=$_GET['id'];
	
	$ServerName="localhost, 1433";
	$ConnectionInfo=array
	(
	"Database" =>"mojabaza",
	"UID" =>"123",
	"PWD" =>"xxxx",
	"CharacterSet"=>"UTF-8"
	);
	$Conn=sqlsrv_connect($ServerName, $ConnectionInfo);

	if(!$Conn)
		{
		echo "Ni se mogoce povezat z bazo.</br>";
		die(print_r(sqlsrv_errors(),true));
		}
			
	$return_arr=array();
	
	if($id==0)	
		{      
	 	$stmnt=sqlsrv_query($Conn,"SELECT * FROM dbo.fnClaniPoTipu(Vsi clani)");
		}
	else	
	{
		$stmnt=sqlsrv_query($Conn,"SELECT * FROM dbo.fnVsiPodatkiClana("+strval($id)+")");
	}
	if(!($stmnt))
	{
		echo "Napaka pri izvrševanju poizvedbe.</br>";
		die(print_r(sqlsrv_errors(),true));
	}
	do
	{
		while($row = sqlsrv_fetch_array($stmnt,SQLSRV_FETCH_ASSOC))
		{
			$return_arr[] =$row;
		}
		} while (sqlsrv_next_result($stmnt));
					
		sqlsrv_free_stmt($stmnt);
		sqlsrv_close($Conn);	
			echo json_encode($return_arr);				
?>

Syntax checker mi pravi, da je koda OK, stran pa je prazna.
SloTech - če nisi z nami, si persona non grata.

techfreak :) ::

Poglej v error log od PHPja? Ne poznam sicer kam pri IISju zapisuje to.

Lahko vklopis tudi verbose logging preko:
<?php
error_reporting(E_ALL);
set_ini('display_errors', '1');
oz. nekaj v tem smislu.

Sicer pa ne vem ce si bos kaj olajsal ce bos poleg C# se PHP kodo imel. Kje se ti je pa ustavilo pri povezavi na oddaljeno bazo preko ASP.Net-a?

Zgodovina sprememb…

BivšiUser2 ::

Rabim samo JSON string s pomočjo katerega bom prikazal podatke Clanov. Najprej bi rad izdelal seznam članov, ko pa na njega kliknem pa se odpre window z njegovimi podatki.

Sicer pa ne vem ce si bos kaj olajsal ce bos poleg C# se PHP kodo imel.

Saj samo, da podatke iz baze nekak prikažem na strani ( najraje v obliki JSON).
Kje se ti je pa ustavilo pri povezavi na oddaljeno bazo preko ASP.Net-a?

Ne vem kako pridobiti te podatke in jih displayati na strani. Tip ob 8:28 začne kreirati svojo bazo, ki je lokalnam, jaz pa že bazo imam. Prav bi mi prišla tudi kakšna druga ideja, da UWP app povežem z remote SQL Server podatkovno bazo. Na netu sem gledal tudi za nek asmx servis. Vse skupaj me zelo zmede.
SloTech - če nisi z nami, si persona non grata.

techfreak :) ::

BivšiUser2 ::

Ta del mi je jasen, to kaže tudi oni tip na yt videu. Ni mi jasno kaj dela po 8:28 kako se piše koda, ki bo delala na remote serverju. Kolikor razumem on to deploya na svojem računalniku , mene zanima kako se napiše / izvede, da kodo direktno pokne na server in od tam executa. Na videu tudi vidim, da povezuje neke projekte. Ko jih sam probam na isti način povezati ne gre.
SloTech - če nisi z nami, si persona non grata.

techfreak :) ::

Kaksen server oz. kje gostujes? Je to nek streznik do katerega imas admin dostop ter lahko prides do IISja? Je to Azure?

BivšiUser2 ::

Imam VPS pri Okeanosu, server pa je Windows Server 2012 R2 nameščene pa imam SQL SERVER 2012 ter IIS, na njem pa lahko delam kar mi srce poželi. Saj mi je ideja o servisih kul, samo kaj če vsi assumajo, da imam localhost. Na sploh opažam, da se pri tutorialih uporablja localhost in ne dejanski serverji, kjer se potem moreš še ukvarjat z raznimi odpiranji portov ipd.
SloTech - če nisi z nami, si persona non grata.

Zgodovina sprememb…

BivšiUser2 ::

SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Po dolgem preizkušanju imam naslednje funkcijo,ki dejansko nekaj vrne:
public IQueryable<Clan> DobiClane()
        {
            List<Clan> c = new List<Clan>();
            c.Add(new Clan
            {
                ID = 1,
                Ime = "Janez",
                Priimek = "Novak",
                Eposta = "jn@gmail.com",
                Telefonska = "040",
            });
            c.Add(new Clan
            {
                ID = 2,
                Ime = "Janez2",
                Priimek = "Novak2",
                Eposta = "jn2@gmail.com",
                Telefonska = "040"
            });
//to zgoraj se bo klicalo iz baze;
            IQueryable<Clani> clani = c.AsQueryable();
            return clani;
        }

Kje pa aplikaciji povem, da mi naj vse formatira v json format? Trenutno mi vse izpljune v eni vrstci brez vskaršnega presledka.
SloTech - če nisi z nami, si persona non grata.

dellon ::

aplikacija (oz rest api) sama poskrbi za formatiranje na podlagi requesta (xml ali json string)

Ti pa moraš iz responsa vedno dobiti objekt (seveda če delaš rest api preko asp .net web api).

To da izpljune v eni vrstici je povsem normalno (tako se tudi prišpara na povezavi).
Če želiš gledat lepo formatirane response ali pa na splošno testirati http apije priporočam kaki tool (recimo postman ali pa fiddler)

jamiroq ::

zakaj ne naredis webservisa z wcf? za serializacijo objekta v json bo poskrbel sam.

bedast primer:

// IService.cs
[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "GET",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "/foo")]
    fooResponse GetStuff();
}

[DataContract]
public class fooResponse
{
    [DataMember]
    public int foo;
    [DataMember]
    public string bar;
}

// Service.cs
public class Service : IService
{
    public fooResponse GetStuff()
    {
        fooResponse r = new fooResponse();
        r.foo = 1;
        r.bar = "asdf";
        return r;
    }
}

Zgodovina sprememb…

  • spremenilo: jamiroq ()

BivšiUser2 ::

Ma tolko različnih rešitev kažejo po tutorialih, da se še kar po zgornjem videu.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

edit: Ma tolko različnih rešitev kažejo po tutorialih pa toliko različnih rešitev, da se kot začetnik preprosto zgubim.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

OK, sedaj imam stvar spisano, edino zanima me samo zakaj mi Firefox prikazuje brez JSON sintakse, med tem pa Edge bp to prikazuje, bi me moralo to skrbeti?
SloTech - če nisi z nami, si persona non grata.

jamiroq ::

Ne. Skrbeti te mora, ce client ne zna sparsati JSONa :). Edge ima mogoce vgrajen nek JSON-pretty-print, Firefox gotovo ne. Namesti extension pa bo avtomaticno sformatiral in pobarval.

BivšiUser2 ::

FF vklopi JSON-pretty print, če v datoteko Global.asax.cs v metodo Application_Start vpišemo 2 vrstici.
Na koncu je vsebina datoteke takšna:
using System.Net.Http.Formatting;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace ClaniREST_API
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            //spodnji vrstici povesta brskalniku, da gre za JSON string
            GlobalConfiguration.Configuration.Formatters.Clear(); // brišemo vse možnosti formatiranja
            GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter()); // dodamo samo JSON formatiranje
        }
    }
}
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Imam težave pri deployanju REST apija na serverju. Prvič ko sem jo deployal na localhostu (računalnik na katerem je API bil spisan) mi je delala bp. Po rebootu pa mi vedno kaže error 503, eventviewer pa poroča:

The Module DLL C:\Windows\System32\inetsrv\iis_ssi.dll failed to load.
The data is the error.

Odkljukal sem Server Side include v "Funkcije sistema Windows", pa še vedno nič. Ne spoznam se najbolje na IIS zato tudi po prvi točki ne vem točno kaj naredit: https://serverfault.com/questions/52938.... Uporabljam IIS Express za Windows 10 (verzija 16241).

Prav tako sem probal aplikacijo gostiti na Windows Server 2012 R2, kjer imam tudi SQL server 2012. Dobim error tipa 404, ki trdi, da aplikacije stran.com/api/Clani ne more najti, prav tako ne more najti ostalih strani, začenši z "/" kjer je "pozdravna stran" (tista na kateri je dokumentacija) .
Prav tako me zanima pravilen connection string za server.
Po podatkih na strani z connection stringi bi tale moral delovati v primeru, da sta na mašini tako IIS (8.5) kot SQL server (2012).
private SqlConnection povezava = new SqlConnection("Data Source=(localdb)\\SQLEXPRESS;Initial Catalog=moja_podatkovna_baza;User id=sa;Password=geslo_ki_je_pravilno");

Kako torej pravilno zapakirati aplikacijo in jo prenesti na target server (video tutoriali kažejo samo kako to narediti na, ko je mašina na kateri je aplikacija bila spisana = target serverju). Prostora, da bi namestil VS na žalost ni.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Po času, se mi JSON string več noče pokazati. SQL funkcije, ki kliče podatke sicer ne najdem, mi jo pa v Win32 programu izvede in najde... Kje začeti troubleshoot?
SloTech - če nisi z nami, si persona non grata.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

PSEXEC problem

Oddelek: Operacijski sistemi
5604 (532) Pesimist
»

MS Access (strani: 1 2 )

Oddelek: Programiranje
647046 (5104) travica
»

[C#] Pravice za spreminjanje in restore baze

Oddelek: Programiranje
5976 (796) nuclear
»

Android+mySql težava

Oddelek: Programiranje
91126 (878) abcd123
»

Moji strežniki

Oddelek: Omrežja in internet
323256 (2172) Hexx

Več podobnih tem