Springen naar inhoud


- - - - -
Solved

Client forms authentication



  • Log in a.u.b. om te beantwoorden
Er zijn 7 reacties in dit onderwerp

#1 Niels

Niels

    Senior Developer

  • Leden
  • PipPipPip
  • 244 berichten
    Laatst bezocht 23 nov 2009 21:33

Geplaatst op 24 april 2009 - 00:00

Hoi,

ik ben een noob is asp.net. Nu heb ik een applicatie gebaakt die gebruikt maakt van een asp.net webservice. Nu wil ik dat als ik mijn form open dan hij een gaat checken als de aangemelde gebruiken hier gebruik van mag maken of niet !

Nu weet iemand hoe ik daar aan kan beginnen ?
Een goede site voor uitleg ...
Want google vette link maar vind alleen maar veel rommel en  niet veel zinnige uitleg

Alvast bedankt groeten

Niels

#2 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1422 berichten
    Laatst bezocht 08 apr 2021 10:22
  • LocatieBrugge

Geplaatst op 24 april 2009 - 22:26

kan je de situatie een beetje verhelderen?

Je hebt een windows forms application en een webservice en je wilt dat bij het starten van je windows forms appliation de webservice wordt gecontacteerd?
Je hebt een webservice en voor iedere aanvraag dat je ernaar stuurt moet je logincodes verzenden?


In het eerste geval zal het gemakkelijkste zijn om een web reference toe te voegen. Je zoekt je webservice op en VS zal automatisch de nodige klassen aanmaken om met je webservice te communiceren.

In het tweede geval: de klassen die de gebruiker opgeeft zijn allemaal afgeleid van een basisklasse dat verplicht een gebruikersnaam en wachtwoord nodig heeft.
Hier heb je overerving nodig van klassen. Als je dit niet snapt wil ik het wel eens uitleggen.

#3 Niels

Niels

    Senior Developer

  • Leden
  • PipPipPip
  • 244 berichten
    Laatst bezocht 23 nov 2009 21:33

Geplaatst op 25 april 2009 - 12:06

Wil eigenlijk het 2de realiseren.

Dit is op het ogenblik de inhoud van mijn solution :

Geplaatste afbeelding

Zoals je kan zien werk ik met een meerlagen model de DASQL,en de BL projecten staan al op de server inclusief de webservice WB.
Hier heb ik een service in en als ik met die connectie maak dan zou ik de user willen checken.

Ik snap overerving wel maar aangezien ik maar een service heb kan ik toch alleen hier zorgen dat de gebruikersnaam en pwd wordt meegegeven .
Misschien kan je me het toch maar beter ff uitleggen :) als je natuurlijk wilt .

Alvast bedankt

Groetjes niels

#4 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1422 berichten
    Laatst bezocht 08 apr 2021 10:22
  • LocatieBrugge

Geplaatst op 25 april 2009 - 13:43

Even zeggen wat ik heb gedaan:

Ik heb 2 basisklassen gemaakt:

BaseRequest:
Visual Basic Code:
<Serializable()> _
Public MustInherit Class BaseRequest

	Private _username As String
	Public Property Username() As String
		Get
			Return _username
		End Get
		Set(ByVal value As String)
			_username = value
		End Set
	End Property


	Private _password As String
	Public Property Password() As String
		Get
			Return _password
		End Get
		Set(ByVal value As String)
			_password = value
		End Set
	End Property
End Class

BaseResponse:
Visual Basic Code:
<Serializable()> _
Public MustInherit Class BaseResponse

	Public Sub New(ByVal ErrorCode As Integer)
		_errorcode = ErrorCode
	End Sub

	Public Sub New()

	End Sub

	Private _errorcode As Integer
	Public Property ErrorCode() As Integer
		Get
			Return _errorcode
		End Get
		Set(ByVal value As Integer)
			_errorcode = value
		End Set
	End Property
End Class

Alle communicatie die ik doe zal ik laten gebruik maken van deze 2 klassen.
Wil ik bijvoorbeeld een lijst van gebruikers krijgen op basis van een id kan ik volgende klasse maken:

GetGebruikersRequest:
Visual Basic Code:
Public Class GetGebruikersRequest
	Inherits BaseRequest

	Private _UserID As Integer
	Public Property RequestUserID() As Integer
		Get
			Return _UserID
		End Get
		Set(ByVal value As Integer)
			_UserID = value
		End Set
	End Property
End Class

Het antwoord kan er dan als volgt uitzien:
GetGebruikersResponse:
Visual Basic Code:
Public Class GetGebruikersResponse
	Inherits BaseResponse

	Public Sub New(ByVal Users As DataTable)
		MyBase.New(0)
		_userTable = Users
	End Sub

	Public Sub New(ByVal errorcode As Integer)
		MyBase.New(errorcode)
	End Sub

	Protected Sub New()

	End Sub


	Private _userTable As Data.DataTable
	Public Property UserTable() As Data.DataTable
		Get
			Return _userTable
		End Get
		Set(ByVal value As Data.DataTable)
			_userTable = value
		End Set
	End Property
End Class

Dit zijn klassen die gewoon data bevatten, ze zullen geen code bezitten om berekeningen te doen of dingen in je database te bewaren of uitlezen, dit moet gebeuren door andere klassen. Deze 2 (4 eigenlijk) klassen zal je enkel gebruiken als transportklassen.

Voorbeeld van communicatie:
Op je webservice:
Visual Basic Code:
	<WebMethod()> _
	Public Function GetUsers(ByVal request As GetGebruikersRequest) As GetGebruikersResponse
		If canLogin(request) Then
			Return New GetGebruikersResponse(New DataTable("Users"))
		Else
			Return New GetGebruikersResponse(0)
		End If
	End Function

	Private Function canLogin(ByVal request As BaseRequest) As Boolean
		Dim username = request.Username
		Dim password = request.Password

		'doe databasecontrole
		Return True 'antwoord van databasecontrole
	End Function

Je ziet dat ik hier niet veel controles heb gedaan maar dit is voorbeeld.
Omdat je GetGebruikersRequest hetzelfde is als je BaseRequest (het is een uitbreiding ervan) kan je een algemene functie maken dat een BaseRequest aanvaard. Alle klassen die je laat overerven (die inherits) zullen door deze functie worden aanvaard. (de extra functionaliteit dat je hebt gebruikt om uit te breiden kan je niet gebruiken maar is niet nodig zoals je ziet)

Als de username en password dat is ingegeven correct is geef ik een lege datatable terug, anders een foutmelding. Om dit ook mooi terug te kunnen sturen naar de gebruiker pak ik dit in in een BaseResponse. BaseResponse heeft maar 1 variabele en dit houdt de mogelijke foutmelding bij. Als er geen fout is zal dit 0 zijn en weet je aan de andere kant dat je van het volledige object gebruik mag maken.


Voorbeeld van hoe je dit dan gebruikt in je code:
Visual Basic Code:
		Dim conn As New Service1SoapClient()
		Dim request As New GetGebruikersRequest()
		request.Username = "test"
		request.Password = "test"
		request.RequestUserID = 0

		Dim response As GetGebruikersResponse
		response = conn.GetUsers(request)

		If response.ErrorCode = 0 Then
			Dim AntwoordTabel As Data.DataTable = response.UserTable
		End If

Deze klassen zijn zeker voor uitbreiding en verbetering vatbaar maar het is als voorbeeld.


Wat je zeker niet mag doen (hopelijk heb je dit nog niet gedaan) is je service toe te voegen als reference maar als web reference (of service reference in 2008).
Het verschil in deze 2 zaken is dat de eerste nood heeft aan een dll (of exe) dat je selecteert, de 2de geef je een url in waar je webservice zich bevind (de .asmx) en dan zal VS automatisch de nodige klassen aanmaken. Deze klassen zullen enkel je public waarden bevatten maar geen logica. Zo kan je een communicatie voeren zonder dat je je logica vrijgeeft.


Als je nog problemen hebt met mijn uitleg mag je dit gerust vragen. Ik weet dat het in het begin verwarrend kan zijn.

#5 Niels

Niels

    Senior Developer

  • Leden
  • PipPipPip
  • 244 berichten
    Laatst bezocht 23 nov 2009 21:33

Geplaatst op 25 april 2009 - 16:30

Nee eigenlijk niet verwarrend :) eigenlijk wel logisch heb de structuur van mijn gans programma ook zo in elkaar zitten.

Gewoon connectie voor database klassen, state klassen met de waardes , stateless klassen om je handelingen te doen en in dit geval natuurlijk je webservice.

Maar heb nog een vraagje ga jij je users bijhouden in een tabel in je database ? of in een encrypted xml file ?

grts

#6 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1422 berichten
    Laatst bezocht 08 apr 2021 10:22
  • LocatieBrugge

Geplaatst op 25 april 2009 - 16:52

Waar je de users bijhoudt is een eigen keuze. Je kan het wel wat bijsturen op basis van bepaalde zaken.

Als je een kleine groep gebruikers hebt en geen zin om een database te onderhouden kan een xml-document genoeg zijn.
Als je veel gebruikers hebt en dat die op een korte tijd de gegevens raadpleegt is een database beter.

Reden: Een xml-document moet worden ingelezen wat een redelijk traag gebeuren is. Tijdens het inlezen kan een andere gebruiker dit document niet inlezen. Met weinig actieve gebruikers is een korte wachttijd niet erg maar hoe meer bezoekers je hebt hoe groter de wachttijd wordt en hoe meer gebruikers zullen afhaken. Een database heeft deze beperking niet.


Wat ik hier heb geplaatst van gebruikers is ook maar een voorbeeld. Ik heb niet veel fantasie en een lijst met gebruikers opvragen was het eerste dat in mijn gedachten schoot. die requestuserid heb ik erbij gezet om te tonen dat je ook iets kan meesturen naar de server

#7 Niels

Niels

    Senior Developer

  • Leden
  • PipPipPip
  • 244 berichten
    Laatst bezocht 23 nov 2009 21:33

Geplaatst op 25 april 2009 - 16:56

Ja dan denk ik inderdaad dat een extra table maken het beste gaat zijn,
want dan kunnen er ook meer mensen te gelijk aan anders moet je nog een time-out gaan voorzien en ...

Alvast bedankt denkt dat ik het nu wel verder kan oplossen.

Thx

#8 Niels

Niels

    Senior Developer

  • Leden
  • PipPipPip
  • 244 berichten
    Laatst bezocht 23 nov 2009 21:33

Geplaatst op 05 mei 2009 - 17:08

[SOLVED]

allemaal bedankt

voor jullie informatie

Grts





Ook met taq Solved voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[Solved] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)