Integrált információs rendszerek labor br Web Service .NET alapon
A VIK Wikiből
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
- 2006
- 2007-ben is ugyanaz volt a labor menete, csak a WS kódja változott picit, meg a Web Service TCP fölött rész kimaradt.
Web Service laborok más tárgyakból
- Elosztott rendszerek — Visual Studio 2004
- Szoftverfejlesztés J2EE platformon — NetBeans 5.5
Web Service létrehozása
Szükséges: Visual Studio 2005, Web Service Enhancement 3
File / New / Web Site / ASP.NET Web Service
- Location: File System, c:\wselab\wse
- Language: C#
App_code / Service.cs
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; public class OrderItem { public string Name; public int Quantity; } [WebService(Namespace = "http://www.aut.bme.hu/wselab/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { [WebMethod] public decimal Order(OrderItem[] items) { decimal price = 0; foreach(OrderItem item in items) { price += item.Quantity; } return price; } }
.NET kliens
Solution-ön Add / New Project / C# Console Application
- Name: WseClient
- Mindkét projekten jobb gomb, WSE 3.0-t bekapcsolni (General fülön összes checkboxot beXelni, amit lehet)
- Service-t indítsuk el Ctrl+F5-tel, másoljuk ki az url-t vágólapra
- Kliensen Add Web Reference, másoljuk be az url-t, pl. http://localhost:1091/wse/Service.asmx
Program.cs
using System; using WseClient.localhost; namespace WseClient { class Program { static void Main(string[] args) { ServiceWse service = new ServiceWse(); OrderItem[] items = new OrderItem[1]; items[0] = new OrderItem(); items[0].Name = "Paper"; items[0].Quantity = 1000; Console.WriteLine(service.Order(items)); } } }
Authentikáció
Szerveren App_Code könyvtárba hozzunk létre egy UserAuthentication.cs osztályt
using Microsoft.Web.Services3.Security.Tokens; public class UserAuthentication : UsernameTokenManager { protected override string AuthenticateToken(UsernameToken token) { return token.Username; } }
- Szerveren WSE 3.0 / Properties / Security / Security Tokens Manager / Add
- Token Manager: Username Token Manager
- Type-ot kell csak megváltoztatni UserAuthentication-re
- Policy fülön Enable Policy, majd Add...
- Name: ServerPolicy
- Secure a Service application
- Authentication method: Username
- Enable WS Security 1.1 Extensions: nem kell
- Service class elé beírni +1 attribútumot: [Policy("ServerPolicy")]
- Indítsuk el a klienst. Exception-t dob: Username Token nincs benne az üzenetben
- A WseClient projektben szintén hozzunk létre egy policy-t ClientPolicy néven
- Secure a Client application
- Authentication method: Username
- Ne írjunk be fix user nevet
- Enable WS Security 1.1 Extensions: nem kell
- Klienst ki kell egészíteni 3 sorral a service hívás előtt
UsernameToken token = new UsernameToken("Tibi", "Tibi"); service.SetClientCredential(token); service.SetPolicy("ClientPolicy");
- A kliensben lefut a hívás, de ha rossz jelszót adunk meg, exception-t dob
A jelszót a következő módon küldi át a kliens
- véletlen string + hash(jelszó + véletlen string + időpont)
- A szerver 10 percig fogadja el az üzenetet, de 10 percig cache-eli a kapott véletlen stringeket is, és ha már előfordult, nem fogadja el az üzenetet
- Ezt az algoritmust hívják digestnek
- Az algoritmus nem véd az üzenet megváltoztatása ellen, az integritást digitális aláírással lehet biztosítani
Digitális aláírás
Szükséges: IIS Resource Kit Tools-ból SelfSSL csomag.
- Hozzunk létre egy tanúsítványt: =selfssl /T /V:30 /N:CN=WseLab=
- Szerveren WSE Settings 3.0 / ServerPolicy / Replace...
- Secure a service application
- Authentication method: Username
- Enable WS Security 1.1 Extensions
- Sign and encrypt
- Select Certificate...: WseLab (ide elég lenne olyan certificate, ami csak a publikus kulcsot tartalmazza)
- Kliensen WSE Settings 3.0 / ClientPolicy / Replace...
- Secure a client application
- Authentication method: Username
- Enable WS Security 1.1 Extensions
- Sign and encrypt
- Store location: LocalMachine
- Select Certificate...: WseLab
- Ellenőrzés
- Kliensen WSE Settings 3.0 / Diagnostics / Enable message trace
- Indítsuk el a klienst
- bin/debug könyvtárban nyissuk meg a OutputTrace.webinfo-t és szörnyűlködjünk el :)
Web Service TCP fölött
- Solution / Add / New Project...
- Name: ConsoleService
- WSE 3.0-t bekapcsolni
- References / Add Reference / .NET / System.Web.Services
- Másoljuk át a UserAuthentication.cs-t
- WSE Settings 3.0-ban
- új SecurityToken Manager, Type=UserAuthentication, ConsoleService
- ServerPolicy-t hasonlóan beállítani, hogy a WsaLab tanúsítványt használja
Program.cs
using System; using System.Web.Services; using System.Web.Services.Protocols; using Microsoft.Web.Services3; using Microsoft.Web.Services3.Messaging; using Microsoft.Web.Services3.Addressing; public class OrderItem { public string Name; public int Quantity; } [WebService(Namespace = "http://www.aut.bme.hu/wselab/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [Policy("ServerPolicy")] public class Service : System.Web.Services.WebService { [WebMethod] public decimal Order(OrderItem[] items) { decimal price = 0; foreach(OrderItem item in items) { price += item.Quantity; } return price; } } namespace ConsoleService { class Program { static void Main(string[] args) { Uri address = new Uri("soap.tcp://localhost/OrderService"); SoapReceivers.Add(new EndpointReference(address), typeof(Service), false); Console.ReadLine(); } } }
- WseClient app.config-jában, vagy a Web References / localhost property-i között az url-t átállítani soap.tcp://localhost/OrderService-re
- Solution / Properties
- Multiple startup project: ConsoleServer és WseClient
-- Peti - 2006.10.13.