Report on the Wichita Code Camp

Published 04 June 06 11:31 PM | dwalker 

Raymond Lewallen: http://codebetter.com/blogs/raymond.lewallen
Building strongly-typed session objects, cache objects, and viewstate.

If you aren't using a session management object you must. Do a search for session[] and make your developers give a justifiable business reason they need to use something outside of the project's session object management class. Use code reviews to enforce it.

Why is it that developers can have the confidence to say definitively "this is how it should be done" and are more than willing to follow standards. In fact, by my experience as of late, they are really the ones pushing for it. It makes their jobs easier.

Yet, management and managers can't even agree upon and finalize the simplest decisions? We want the background color blue, no red, okay how about green?
We want this field here and this field there.

Cos Callis: Custom User Objects in ASP.NET

A lot of developers create their own object and store it in Session. Such as Email address, etc. Since this is typically tied to the CurrentUser, you might as well have the additional properties you need there.

Page.User is based off IPrinicipal and all you need to do to add to it is create you own class that implements the IPrinicipal interface. IPrincipal is the important part.

Attaching it to the LoggedOnUser make it so that only the current user can see their data. This data is stored in HttpContext instead of Session, making it even more secure.

(* Note: the following is Pseudo Code:)

Turn on forms authentication in web.config

You build your User Object inside Global.asax
sub Application_AuthenticationRequest
 try
  if not request.cookies(Formsauthenticaion.FormCookieName) is  nothing then
   context.user = new ccuser()
  else
   context.user = new ccanonymoususer
  end if
 catch ex as exception
  context.user = new ccanonymouser
 end try
end sub

Login btn click .
 httpcontext.current.user = new ccuser(textbox1.text, textbox2.text)
 formsauthention.redirectfromloginpage(textbox1.text, true)
end sub

public class CCUser
 inherits System.Data.DatasSet
 implements System.Security.Prinicipal.IIdentity, System.Security.Prinicipal.IPrincipal

public readonly property identity() as identity implements..
 get
  return me
 end get
end property

_email
_firstname
_lastname
_roles
_menuOptions
_CSS
_webparts datatable

(data repeater to display the webparts)

Page.CSS = User.CSS
Me.StyleSheetTheme  = User.CSS

3 constructors

blank new ()

public sub new(byval email as string, byval password as string)
 validateuser(email, password)
 loadcooke(email, password)
end sub

public sub new(byval Cookie as HttpCookie)
 dim exttickit formsauthen.decrypt(tkt)
 validateuser(ctkt.Name, ctkt.UserData)
 HttpContect.Current.User = new System.Security.Principal.GenericPrincipal(id, MyRoles)
end sub

pub sub validateduser(byval email as string, password as string)
 'It doesn't matter type of authentication type you use,
 'you can use mixed, try ActiveDirectory first, and if it fails,
 'then do your custom db user login.
 'IsInternal T/F whether they're in AD.
end sub

public sub LoadCookie(email as string, pwd as string
 Dim tkt as New FormsAuthenticationTicket(1, "CodeCampUser", Now, Now.AddHours(1)), True, "Hello Wichita",
 dim exttickit formsauthen.encrypt(tkt)
 httpcontext.current.response.appendcooke(n httpcookie(forma.formcookiename, ... )
end sub

then login sql stored proc:
select * from menus where userid=##
select * from users where userid=##

public Class InvalidLogonException
 inherits System.Exception

end class

public Class CCAnonymousUser
 inherits CCUser

 public overrides ReadOnly Property IsAuthenticated() As Boolean
  get
   return false
  end get
 end property

 public overrides readonyl property name() as string
  get
   return ""
  end get
 end property
 
 function isinrole
end class

public overrides reado
end sub

class ccbasepage
 inherits System.Web.UI.Page

 public shadows Property User as CCUser
  Get
   return directcast(mybase.user, ccuser)
   'ctype tries to valid first
   'what is full explanation why directcast is better
  End Get
 end property

Great Job! On why it's needed, how useful it is, and why it's best to inherit and implement from the Current.User

'only argument people have voiced: it creates too much bloat, but you're going to do it somewhere (session, application, etc) - why not here - the most logical choice.

Raymond Lewallen - Continuous Integration
www.codebetter.com/blogs/raymond.lewallen/downloads/ci.zip
Continuous information - if you only talked to your customer once a month your project would be in trouble. So why do you wait until deployment to really audit your code?

FxCop - All methods should be Pascal case. )
Only thing that doesn't work with 2.0 is nCover report - it runs but produces empty xml report.

Yours Truly - Introduction to Programming Windows Communication Foundation (WCF)
The presentation went well, it was obvious that everyone understood how easy it is to create services, as well as, how much easier WCF makes it.

I had one question by the most inquisitive of the group:
Can Services or Clients be used to attach as an "EventHandler" to a Service?

After much thought, I realized, the solution to the architecture that he is really looking for would involve a multiple service situation. Trying to use a Client as an EventHandler would logically be the opposite message communication that is typical from Client to Service, so in my opinion, the real solution to what he was asking, would be for the Client to have a Service of it's own (and/or the "EventHandler" Service would be running somewhere), and the Service that is needing to communicate the event would then send it to this Service for any additional handling.

I had one comment afterwards in summation was: "it's hard to get excited about WCF, because Services have been around for several years, and it's so easy to create a service, but I've never done it and I don't see the need in my environment".

After spending a little bit of time thinking about it, the first thing that comes to mind is how developers are always more confused by the things that are simple. As developers, we are so inbreed to think everything is complex. So, when we encounter something that is simple, it really baffles us and we keep thinking there must be something more that I'm missing.

Well, as services go, it is really simple. WCF only makes it even more simplified, which is good. As far as not needing services in any environment, I can see that thinking today, but really the ability to make your business functionality and processes available easily to multiple applications in-house and to your external clients and business partners, it's only a matter of time. Why not be prepared, since it is so easy?

Web Application Security
This was a introductory presentation on all the various aspects security.

All various methods in IIS that are security related: SSL, etc.

Self Certificate Generator w/IIS 6 Resource Kit

SQL 2005 - Native Encryption - 127bits
US.gov & credit card industries, etc. must be encrypted at least 128 bits.

iis vs dba's vs developers (security needs to be implemented by all)

sql injection attacks

sql server security versus windows authentication versus local db security.

aspnet_regsql to install ASP.NET 2.0 user management

'' or '=' and '' or '=' in password

select * from login where user='' or '=' and password='' or '='

select * from login where user='' or 1=1 and password='' or 1=1

select * from login where user='' or delete * from % and password='' or = '='

select * from login where user='' or delete * from % and password='' or = 1=1

use stored procs.

Summary
The thing that stood out the most is that even though a lot of the topics were things we already new, we all still walked away surprisingly learning more than we had ever expected.

Great Job WichitaDevelopers.NET

Sponsor

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# Tim Hibbard said on June 5, 2006 1:50 PM:
Nice wrapup.  Jason and the guys did a good job setting all this up.  Steve Walker talked about the sessions on his blog (http://www.sharepointforums.com/Blogs/tabid/147/BlogID/2/Default.aspx) and I did too.
# Raymond Lewallen said on June 6, 2006 8:42 AM:
I'll freely admit I'm the person who said "its hard for me to get excited about WCF".  Don't misunderstand me though, I'm thoroughly excited about web services and the way the communication works.  I suppose I've always expected WCF to be a major leap over web services and remoting and have had an expectation for WCF that doesn't exist.  It was still a great topic and presentation, along with all the session I attended.

Great job to all the presenters and attendee's who spawned feedback and discussion.
# dwalker said on June 6, 2006 9:37 AM:
Hi Tim and Raymond,

Thank you both for your kind comments and attending my first persentation ever!

Thank you Raymond for giving even more details on your perspective and opinion on WCF. It is greatly appreciated and your opinion matters to me. I also agreed with you and could definitely see where you were coming from, that is why I was sure to share your comments, at least anonymously.

I do believe that the entire goal of WCF was simplification of the various programming models into the one Unified Model and that is the only reason to get excited today.

The Unified Model has many reasons to be excited: simplified learning, simplified code, simplified service switching (.Net remoting to Web Services, etc.) and finally, what I believe you were already hoping for in WCF, the ability for Microsoft to more easily take WCF to the next level with new service capabilities.

I'm excited about it, because I think WCF is really like "Web Services version 2", so version 2 of WCF will actually be Microsoft's version 3 and expect it to be the version that should give everyone reason to excited through break-thru advancements.

Personally having dealt with the .Net remoting issues and web services individually, the step that WCF does take is enough to get me excited, but I am admittedly aware that I'm easily excited when steps in the right direction are taken.

Thanks again!

Leave a Comment

(required) 
(optional)
(required) 
Enter the code you see below

About dwalker

David Walker has over 15 years experience in application development with over 50% of that employed as a consultant with companies such as: Texaco, Bank of Oklahoma, Winner Communications (ESPN.com) and IBM Global Services. At the age of 14, he began his application development ambitions with a Commodore 64, BASIC, and a 300 baud modem. Even at that early age, he primarily focused on two specific application types: multi-user communities and database applications.

His hunger to learn as much as possible about development lead him through courses such as DBase III, DBase IV, Pascal, C, C++, Java, and several in UNIX. He started his development career first doing heavy processing with Access and VBA, then moved on to VB 3, Oracle, and Delphi. Visual Basic was one environment that remained constant for many years, including his very first .NET projects performed in Visual Basic.NET.

After working several years on very high end internal Corporate applications, the consultant company he was working for, sought out his ideas for actual software products that could be packaged and sold. He had already developed several prototypes of a dynamic portal application, before portals even became popular, so this became the logic decision and he became the Director of Product Development. Under his direction, a team of developers and graphic artists, took a skinning approach before that become popular, and completed the core portal application, and continued on to developer 15+ add-on modules, including things such as: Help Desk Ticket Systems, Change Control, Records Management, Human Resources, and many more applications. Eventually, it spun off into it's own separate company as KnowledgeGEAR, a complete intranet in the box solution.

Having worked as a consultant, he has had a experience with a very wide range of applications and architectures, at one time, even converting several Fox Pro and GW-Basic applications to VB 6 and ASP. His early training of Unix and the C language and years of experience with JavaScript, lead him very quickly to C#, where he has remained focused ever since.

He is the current President of the Tulsa Developers .NET user group.. He has been an MCP since 2003 and MCAD and MCSD since 2005. He is currently pursuing his MCDBA and then on to MCSE.

Search

Go

This Blog

Tags

Archives

My Blog Roll (Partial)

My Sites

Syndication