Tags: | Posted by blockwood on 3/8/2010 6:28 AM | Comments (0)

Since posting about jobs, career guiding and the importance of certification many students have asked about what they should do and where they can move too.  Below should provide some assistance as they target .NET specific exams:

 

Download the pdf here - VS2008 Certifications

 

Download the pdf here - VS2010 Certifications

Struggling Providing Reasoning To Your Employer?

Check out the other postings this month on this site.  Or check out Microsoft's website for addition reasoning: click here

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 3/6/2010 9:58 AM | Comments (0)

With 28 sessions and a keynote presentation to choose from, TechFuse 2010 is an event you won't want to miss. It is the most cost-effective way for IT and Developer pros to get up-to-date, 200-300 level education on the topics that matter to your role. TechFuse will provide you resources on the latest developments in IT and Developer trends, technologies, application implementation issues, products and services from tons of local professionals.

Register Early for a Chance to Win!


NetbookEveryone who registers for TehFuse 2010 by April 9 will be automatically entered to win a Netbook from Microsoft. You must be present at TechFuse to win! 

Event Details:

Date: May 6, 2010
Location: The Ramada, Bloomington
Time: 8am-5pm
Cost: $349 ($399 after April 9)
    
Register for TechFuse! 

Event Site: http://www.benchmarklearning.com/techfuse.aspx

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 3/3/2010 4:05 AM | Comments (0)

Kevin and Ted work for a major auto manufacturer. Both were technical support specialists with an eye on getting certified as Microsoft Certified Systems Administrators (MCSA). Kevin was able to get his company to pay for everything associated with the certification program: training, exams, books and study materials. Ted was only able to get the company to pay for classes at the local community college. For all other expenses associated with the process, Ted had to pay out of pocket. Kevin obtained his MCSA certification in only six months. He has since been promoted to systems administrator with a nice pay raise to go along with it. A year since beginning his quest for certification, Ted has yet to pass one exam, and he is still stuck in his old tech-support job.

As the senior education consultant at one of the nation's largest IT training and certification centers, I run across situations like the one described above all the time. Amazingly, two individuals from the same company, going for the same IT certification, using the same company-sponsored education-assistance program, pursue two totally different training programs and achieve two very different results. One is able to get all certification expenses covered. The other is forced to settle for a sub-par education and is left with major out-of-pocket expenses such as exam costs and study materials. Why did the HR department cover all of Kevin's expenses but only some of Ted's? How was Kevin able to finish his program in only six months-all expenses paid-and Ted has barely finished his second class and has yet to pay for his certification exams? As always, the truth lies in the details.

Chances are you already recognize the value of IT certification: increased compensation, faster rate of career advancement, enhanced credibility as an IT professional, improved chances of finding a new career and improved productivity. Now comes the tricky part: how to pay for it.

Budgeting for IT certification involves determining the real cost of everything associated with getting certified, finding a way to pay for it and completing the program in a realistic time frame, before the technology you are getting certified in becomes outdated. In the post-dot-com-crash days of IT budget cuts and outsourcing, you are lucky if your company is willing to share the cost of your certification, let alone pay for the whole program. If you are fortunate enough to work for one of these progressive organizations, I will show you how to maximize the company's education plan to get the most bang for your buck and avoid having to pay the lion's share of your certification program out of pocket. If you are currently out of work, or if your company does not offer education assistance, which is becoming more common these days, there are other public- and private-aid programs out there to help you.

Step One: Determine the Real Cost of Your Certification

When choosing a training program, it is easy to overlook hidden costs. They pop up out of the blue, and sometimes these unexpected expenses can delay your certification process. You can count on incurring the following expenses:

  • Actual exam costs: Test fees will vary based on which certification you pursue, as well as the number of exams involved. Test fees can be as low as $20 per test (Cannon Certifications) to as much as $10,000 (NCR ATM Service Engineer). Both of these examples are extreme. Most IT certification exams will cost between $100 and $300. Some vendors only require passing one exam (Sun Certified Java Programmer at $165 for example). Other vendors require multiple exams. One of the more popular IT certifications, Microsoft's MCSE for example, requires eight exams at $125 a piece. Most IT certification exams are taken on a computer in an authorized testing center, usually either Thompson Prometric or Virtual University Enterprises (VUE). To determine the exact cost of the exam(s) associated with the certification you are considering, visit either of their Web sites at www.prometric.com or www.vue.com.

Don't make the mistake of assuming you will pass all of the exams on the first try. Even for IT veterans, it is common to fail a few exams along the way to getting certified. When budgeting for your IT certification, allot a few hundred bucks for exam retakes or choose a program that offers a test-pass guarantee.

  • Instructor-led training: This is the most expensive piece of the certification puzzle but definitely one of the best defined ways. Depending on the number of courses involved, costs at certification training centers can be between $1,000 and $25,000, and this cost usually includes everything you will need to get certified: books, exams, practice tests, study guides, etc. Colleges charge by the credit hour, usually between $65 and $400 per credit hour. All supplemental study materials and exam fees will have to be paid for a la carte.
  • Study materials and practice tests: Even the best-quality instructor-led certification program will require you to study outside of class and take plenty of practice exams. Thousands of study guides are available for those seeking certification, as well as hundreds of practice tests. Manual study guides are not too expensive-usually between $10 and $50. Practice tests are available both online and in disk format and tend to be pricier than study guides, averaging $30 to $75 per practice test. There are dozens of free practice tests online, but my experience with these is that they do not map well to the real certification exams. Ask a fellow IT professional who has obtained the same certification you are pursuing to recommend a good study guide or practice test.
  • Living expense money: This is one of the most overlooked expenses when budgeting for your IT certification. If you are a displaced, dislocated or an otherwise unemployed IT professional, you need money to pay the bills while getting your education. Even those who are employed might overlook the impact the certification process will have on their finances. For example, someone working 9 to 5 who enrolls in a six-month evening certification program might need to hire someone to take care of the kids at night. Consider these expenses when putting together your IT certification budget.

Step Two: How to Fund Your IT Certification

OK, you've done your research, and you have put together a rough estimate of what it will cost to fund your IT certification program. Now comes the difficult part: Getting someone else to pay the cost, or at least as much as possible. Many companies offer employees some type of education assistance, but amazingly, less than half of IT workers take advantage of it. How can this be? With the rate at which technology changes, it would seem like IT workers would take advantage of company-sponsored tuition assistance more so than any other department. Updating your skills is not just something you should do. It is something you must do if you plan a long career in IT or want to move up the corporate ladder.

It's not that IT workers do not want to get certified. In fact, most do and many are even willing to self-fund their certification, taking out large student loans to earn the credentials they desire. The problem is that in many companies, the HR department will not pay for certification programs. Why? I have found that there are predominantly two reasons. First, the company is afraid that if they pay for certification, the IT worker will leave the company. Second, the company-sponsored tuition guidelines are antiquated and require that eligible programs result in obtaining a degree or letter grade. Certification programs do not offer grade transcripts or degrees, so the request for assistance to attend these programs is denied. Unfortunately, when faced with one of the aforementioned obstacles, many certification prospects simply give up. Don't! Here are some tips on how to get the company on board with your plan.

Sell Them on the 'Big Picture'

Most IT professionals loathe the role of a salesman, but if you want to save thousands of dollars in potential out-of-pocket certification costs, you will have to make an exception. Meet with the HR person who makes the ultimate decision or at least the person who recommends whether your education plan is approved or not. Explain to them in layman's terms (HR people are not usually technical) why it is absolutely critical that they pay for the certification program. Show them how it will save the company money, how it will boost productivity and most importantly, what will happen if you don't get the certification. "The server might crash!" Create a sense of urgency

For example, Sarah was an Access DBA for a growing mid-size advertising firm. She wanted to get certified as an Oracle DBA. She approached the HR department and explained to them that the company database was running out of storage capacity and that the company needed to migrate to a database product that held more information. Instead of focusing on her own personal career goals, she showed the employer how being trained and certified as an Oracle DBA would prevent a future disaster, such as running out of storage capacity and the possibility of having to pay a SQL consultant $15,000 to recover the lost data.

Agree to Sign a Contract

Many companies won't pay for certification because they fear that once the IT worker earns the certification, it's, "adios, on to bigger and better things." To overcome this objection, be willing to sign a contract agreeing to stay with the company for some predetermined amount of time following certification. Most contracts I have seen stipulate that you must stay with the company between one and two years following certification. Obviously, if the company is making you commit to stay for an unreasonable amount of time-say five or more years-you will need to do some serious soul searching. If you are willing to sign a contract, more and more companies are willing to pay for your certification program.

Be Sneaky

OK, so you have explained to HR that the universe is going to collapse into a black hole if they don't pay for that Citrix certification, and you have even agreed to sign a contract, but your HR manager is harder to convince than the warden in "The Shawshank Redemption." Here is how to take advantage of the loophole in most company-sponsored tuition-assistance programs. As mentioned earlier, most of these policies were intentionally designed to exclude certification by requiring that you receive a letter grade or degree from an "eligible institution." Because the only schools that give out grades and transcripts are colleges and universities, you're stuck with a college instead of a private IT certification program. College, however, is not always the best option for obtaining certification because if you are like most IT workers, you already have a degree, degree programs are often too long, college courses and curriculum do not map well to certification exams, and college courses do not include certification exam fees, practice tests and study materials. So what is someone to do who desires certification but whose company will only pay for college?

The Solution

More and more private certification schools have developed relationships with accredited colleges and universities, where the college will give college credit, letter grades and even a transcript to those taking classes at a certification school. Call around to various IT certification centers and ask if they can provide college credit. Purchase the classes from the college or university, but attend the classes at the certification school. These classes usually include everything you will need to actually get certified in a reasonable time frame: classes, books, study guides, practice tests, exam vouchers and a test-pass guarantee. At the end of the class, the accredited college will administer a short exam so they can assign you a letter grade. The college then bills your company. It's that simple. This plan allows you the best of both worlds: You get the certification training you want and to HR it appears as though you went to college, and most importantly, they pay for it!

Remember our friends Kevin and Ted? Both were attempting to get their MCSA certification paid for by their company. Kevin succeeded in getting everything covered and was able to obtain his certification in only six months. Ted, on the other hand, was only able to get the company to cover his tuition and books and has not even taken an exam yet. In order to qualify for company reimbursement, Kevin and Ted were required to produce a letter grade of C or better from an accredited college. Ted made the mistake of assuming that because he needed to produce a grade transcript from a college or university, he actually had to attend his classes at the college. He enrolled in the local community college, which created two major problems. First, each of the six classes he needed to prepare for the MCSA certification were offered over the course of an entire semester-meeting for only an hour on Tuesday and Thursday evenings. Because the classes had to be completed in order, he could not take multiple classes during the same semester. Therefore, he could only take one class per semester. At this rate, it would have taken him three years to complete the six MCSA classes. Second, the college courses were designed for a degree candidate, not a certification candidate, and therefore, there were no practice tests, study guides or certification exams included in the tuition. Ted was forced to pay for these critical and expensive supplemental materials out of his own pocket. The result: one year after beginning his quest for his MCSA, Ted has completed only two classes and has yet to take one exam.

Kevin, on the other hand, took advantage of the loophole in the company's tuition reimbursement program. To produce a grade transcript from an accredited college, Kevin called around and found a private Microsoft Certification Learning Solutions Partner that had a relationship with a local university. The private training center offered all six MCSA courses in a condensed time frame. The six courses were each taught in eight evenings, four hours per night. At the end of each evening class, Kevin took a short exam. His scores on these exams were used to assign Kevin letter grades. After six months, Kevin was able to complete his entire MCSA certification and was reimbursed the total cost of all six classes, exams, study guides and practice tests. All costs associated with the certification were approved for funding because they had been bundled together into tuition costs by the private certification training center and an accredited college had provided a grade transcript to the company. Voila!

What if My Company Doesn't Offer Tuition Assistance?

If your company does not offer any type of educational assistance, do not just assume that you will have to self-fund your education. Call around to local colleges, universities and private certification centers and ask them about grants. Many grants cover all expenses, including supplemental study materials, practice tests and certification exams. Others cover only tuition and books, but every little bit helps. The following are four government grants that will cover the cost of all or part of your certification program, if you qualify:

  • Veterans Administration (VA): Offers grants to both active duty and reserve military and sometimes family. Most popular program is the Montgomery GI Bill. However, they offer other grants as well.
  • Workforce Investment Act (WIA): Designed for those who are unemployed or "under-employed," WIA offers between $3,000 and $15,000 in retraining dollars that may usually be used for certification or degrees. Funds are distributed by each state. Contact your local unemployment office and ask them where the nearest "One Stop Center" is to apply.
  • Vocational Rehabilitation (VR): Designed for those who have a physical or mental impairment, VR grants are usually very generous and often cover the entire cost of approved certification programs.
  • Pell Grants: Many workers assume that because they are employed, they will not qualify. Although Pell Grants are need-based, you might qualify based on your income level.

Student Loan Options

OK, if your company won't pay for it, you don't qualify for any grant money and you didn't just win a million bucks on "Deal or No Deal," you will probably have no choice but to take out a student loan. As far as loans go, student loans probably are the best of breed. They have the best terms of any type of loan: payments are usually deferred for at least one year from when you start your program; interest rates on government subsidized loans are usually very low (2 percent to 4 percent); there are usually no pre-payment penalties, so you can pay off the loan early if you like; and the interest you pay is usually tax deductible. Loans at colleges and universities are usually subsidized by the government and, therefore, nearly all applicants are approved unless you have defaulted on a student loan in the past or dealt drugs in a school zone (believe it or not). Loans at private certification schools are usually unsubsidized, which means approval is based on your ability to repay (credit score) and the interest rate is higher-between 8 percent and 18 percent.

Although nobody likes to incur debt, it has been my experience that certification candidates who have to self-fund their education seem to finish their program and pass their tests faster than those whose training is being paid for by their company or a grant. When you have to pay for something with your own money, it tends to take on a higher priority.

Perhaps the most difficult part of budgeting for IT certification involves no money at all: budgeting for time. Your ultimate success will be determined by how well you can balance your time between work, family and studies. If you can manage your time effectively, one thing is certain: It is all downhill from there. Are you up for the challenge?

Original article can be found here:  http://www.globalknowledge.com/training/generic.asp?pageid=1991&country=United+States
By: Matt McGrath

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 3/3/2010 3:30 AM | Comments (0)
Benchmark Learning - Adult education destination

 

KNOW YOUR EMPLOYER

Before approaching your boss, it is of paramount importance to understand the state of your company.  Are economic times lean?  Is a massive reorganization underway?  These could be hindrances or they could help you structure a solid case.  The key is to have an idea of what is happening internally at the organization and use it to strengthen your argument.

A great way for your organization to stay with the pack or excel in an industry is to staff an educated workforce.  If you can specifically spell out ways your degree will help the organization, you will have laid the groundwork of your case.  Be as specific as possible.

Also, is an advanced degree or certificate officially required or encouraged for the position you have your eye on?  While it is true that the greater your education, the greater the number of doors you create for yourself, some positions simply do not call for it.  Make sure the work and expense are necessary.  Look for trends in people's education who currently or have previously held the position(s) you are interested in.  Glean information by asking your co-workers or approaching the individual about their academic past in a friendly way.
 
KNOW YOURSELF

You also need to be clear on what you want to study and why.  Cause let's be honest, improving your company's talent poll is a secondary goal at best.  Raising your stock as a potential job candidate, and as a person, is first.

Make sure you choose a subject that you have genuine interest in and can help you get ahead - or transition into something you want to do.

It's important to be honest with yourself on how long you plan to stay with the organization you are pitching.  Many employers will have you sign an agreement stating that you will stay employed with them for X number of years. Should you leave early, you will likely be responsible for a portion (or all) of the money the company spent on your education.

If you already have one foot out the door, the last thing you need is added pressure to stay in a bad marriage,  As with most career moves, you need to know yourself before you make a move.  

KNOW THE SCHOOL

While online degrees have certainly become more mainstream, they are certainly not on par with their brick and mortar counterparts. Adult learning facilities can play a key role such as Benchmark Learning, who offers Remote Learning, eLearning, Personal Mentoring and Mentored Learning modalities in addition to instructor led. 

There's a good chance you'll have to "defend" the school to your employer, especially if it's one without a physical building.

This is the real world.

Your goal is to be as prepared as possible and make the strongest case you can.  How long has the school been in business?  How many students do they have?  Do they have any affiliation with nationally-recognized organizations?  These are the types of queries you should be able to answers to all question-askers.

KNOW YOUR BOSS'S CONCERNS

As I mentioned earlier, your primary purpose in continuing your education is self-improvement.  Any boss worth his or her salt will recognize this.  Your job is to disarm them as best as possible, assuring them that this will likely be the last stop on your career train.

Since I'm a tremendous fan of truth and honesty, I think it's OK to be upfront that this endeavor is about you AND the company (not necessarily in that order).  Anything else is ridiculously transparent.

There's another hurdle.  It's something that's on your boss's mind constantly: money.  You are going to have to justify that the money the organization spends on your classes will come back to them two-fold.  Get some projected numbers to back up your claims.

KNOW YOUR POSITION

You'll have a much better chance of getting your tuition approved if the education relates directly to your current job.  If it's not an exact match, you better be able to explain how it fits into your career track - and more importantly - the company's goals.

If you want to take classes that clearly fit within a department other than your own, you need to be able to explain why it's worth their time to cough up the cash.

KNOW YOUR FINANCES

Every company has a different policy when it comes to who will initially pay for your classes.  Years back, I made the case to take a specialized course.  The company agreed to pay.  The only catch was that I had to pay and they would reimburse me 6 - 8 weeks after the course was completed.  At the time I simply didn't have the expendable cash.  I also didn't want to put the expense on a credit card and be stuck with several months of interest.  Be sure you have an idea of what you're willing and capable of doing from a financial standpoint before you make your pitch.

WAYS TO LOBBY FOR EDUCATION

  • Outline how the training will benefit the company in your current role (and where you may end up). At the very least, this will put your ambitions within the organization on the table.
  • Reinforce your commitment to the employer. Share examples of how this increased training will help you stay on top of the latest trends.
  • Show how the competition has employees with this level of education and how it offers a reimbursement benefit. In this day and age—when you can find anyone on the Web—getting this information is not as difficult as it sounds.
  • Have your paperwork in order, and do your research on the program so you are ready to answer any and all questions. Make it easy for your employer to say "Yes," difficult to say "No."
  • If you get the runaround or are rejected, ask when you can broach the subject again. Show that you are committed and that you won't simply go away. (So many bosses I've run across just want to "send you away" as quickly as possible.)
  • Don't circumvent your boss, but do have conversations with HR and upper management about your desire to further your education. These can be casual in nature and could lay the groundwork for when your boss approaches them on your behalf.
MORE INFO

Especially with recruiters and talent managers becoming ever more mindful of a perceived talent shortage. Developing internal talent streams is an important topic.

That said, the questions listed in Know the School are only the beginning, and not the most crucial.

1. Is the school accredited? If so, by what organization? In the U.S. regional accreditation is king, nothing else matters. As mentioned above, accreditation/affiliation/approval by a national professional organization is also good, but apply on program-by-program.

2. What is the rigor of the program? What is the quality of the curriculum? If a school is not going to work you and push you, it is not worth your time and will not add any real value to you as an employee or job candidate. There is a very real difference between convenient and easy.

3. What student services are offered, who provides them, and how are they delivered? Prospective students should look for schools that are helpful and supportive beyond enrollment. Possibly ones that help define and build your career?

4. If online, what is the platform and delivery model? Here is where you want ease-of-use, plus access to tools that suit and support your learning style. Also know the difference between synchronous and asynchronous.

5. You want good instructors, well trained (especially in online teaching models and practices).

Continuing education is great and necessary. Mistakes can be very costly in time and money, so go in as well-informed as possible.

Reference: http://www.jobacle.com/blog/2008/1/30/get-your-employer-to-pay-for-an-online-degree.html
Reference: http://www.usnews.com/money/blogs/outside-voices-careers/2009/01/05/how-to-get-your-company-to-pay-for-college

 

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 3/1/2010 7:44 AM | Comments (0)

This week I'm teaching Developing Web Applications using Visual Studio 2008 and this will be the placeholder for any follow up questions, comments or demonstrations.

Current questions include:

  1. What is .NET Client Profile used and when?
  2. Control State vs View State?

Control State vs View State

Ref: http://msdn.microsoft.com/en-us/library/1whwt1k7.aspx

Control state, introduced in ASP.NET version 2.0, is similar to view state but functionally independent of view state. A page developer can disable view state for the page or for an individual control for performance. However, control state cannot be disabled. Control state is designed for storing a control's essential data (such as a pager control's page number) that must be available on postback to enable the control to function even when view state has been disabled. By default, the ASP.NET page framework stores control state in the page in the same hidden element in which it stores view state. Even if view state is disabled, or when state is managed using Session, control state travels to the client and back to the server in the page. On postback, ASP.NET deserializes the contents of the hidden element and loads control state into each control that is registered for control state.

 

Don't forget to come talk to me so I can provide some extra resources and links and direction for next steps.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 2/8/2010 7:52 AM | Comments (0)

I am hosting a special event for people interested in looking into .NET Development and thought you or colleagues of yours may be interested - this event is available for attending IN PERSON or REMOTELY, please consider attending or passing the event along to someone else you know!

WHEN: 4:30 Feb, 17, 2010
WHERE: Benchmark Learning Edina MN or REMOTE
More Info or to REGISTER: https://email.globeuniversity.edu/owa/redir.aspx?C=a0e5cc38f0614b7e80a560e7d204d3c2&URL=http%3a%2f%2fwww.benchmarklearning.com%2fCourses%2fCrsDetail.aspx%3fC%3dBEWant.NetDev  

Have a great day!

More information contact:

Lisa Seery, Developer Technology Specialst
Benchmark Learning
952-896-6869

======= AFTER EVENT INFORMATION ========

WHAT:  So you want to be a programmer.pdf (399.57 kb)

VIDEO PRESENTATION (45mb): So you want to be a programmer Video

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 1/21/2010 5:44 AM | Comments (0)

Here is a great post found on codeproject.com http://www.codeproject.com/KB/WCF/WCFFAQPart3.aspx

Below are some worth looking into: 

Note :- The below table is taken from book Pro WCF: Practical Microsoft SOA Implementation -- Chris peiris and Denis mulder – Apress 2007
Below is a table which shows for which binding which mode is supported. We did not discuss the mixed mode. It’s nothing but combination of transport and mixed mode. For instance data encrypted and passed over WsHttp using HTTPS is a mixed mode of security. Encryption is nothing but message security and HTTPS is a transport mode. In a combination they form mixed mode.

Binding

Transport Mode?

Message Mode?

Mixed Mode?

BasicHttpBinding

Yes

Yes

Yes

WsHttpBinding

Yes

Yes

Yes

WsDualHttpBinding

No

Yes

No

NetTcpBinding

Yes

Yes

Yes

NetNamedPipeBinding

Yes

No

No

NetMsmqBinding

Yes

Yes

No

MsmqIntegrationBinding

Yes

No

No

So what are the scenarios, advantages and disadvantages of transport VS message security?

 

 

Transport

Message

Scenarios when we should be using one of them

When there are no intermediate systems in between this is the best methodology.  

If it’s an intranet type of solution this is most recommended methodology.

When there are intermediate systems like one more WCF service through which message is routed then message security is the way to go.

Advantages

  • Does not need any extra coding as protocol inherent security is used.
  • Performance is better as we can use hardware accelerators to enhance performance.
  • There is lot of interoperability support and communicating clients do not need to understand WS security as it’s built in the protocol itself.

 

  • Provides end to end security as it’s not dependent on protocol. Any intermediate hop in network does not affect the application.
  • Supports wide set of security options as it is not dependent on protocol. We can also implement custom security.

Disadvantages

  • As it’s a protocol implemented security so it works only point to point.
  • As security is dependent on protocol it has limited security support and is bounded to the protocol security limitations.
  • Needs application refactoring to implement security.
  • As every message is encrypted and signed there are performance issues.
  • Does not support interoperability with old ASMX webservices/

The following table is referenced from the 6461 Microsoft Official Courseware: 

Not all bindings provide all security modes. The main reason that a binding may not provide all security modes is because the binding does not support some fundamental characteristic that the security mode requires. The following table lists which bindings support which modes.

Binding

Transport Security

Message Security

BasicHttp

HTTPS

WS-Security

WSHttp HTTPS

WS-Security

WSDualHttp

Not supported

WS-Security

NetTcp

Transport Layer Security (TLS)

WS-Security

NetNamedPipe

Transport Layer Security (TLS)

Not supported

MsmqIntegration

MSMQ Transport Security

Not supported

NetMsmq

MSMQ Transport Security

WS-Security

WSFederationHttp

HTTPS

WS-Security

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 1/20/2010 12:35 AM | Comments (0)
Richard Blewett is one of the moderators of the MSDN WCF Forum. One of the main areas of questions on the forum is duplex messaging – particularly using the WSDualHttpBinding. So instead of typing long messages repeating the same thing in answer to these questions he decided to write this blog post to give a bit of background about duplex messaging and then discuss the options for bindings and common problems people have.  His post and related posts can be found here: http://www.dotnetconsult.co.uk/weblog2/
What is Duplex Messaging?

There are many ways that messages can be exchanged between two parties in a service based system: the client can send messages to the server and never get any back; the client can send a message and wait for a response; the client and service can send eachother messages without any pre-defined pattern; the client can send the service a message but not wait synchronously for a response and then then service can send a message back asynchronously; and there are many others. However, the first three of these are supported natively in WCF and are known as One-way, request/response and duplex.

So Duplex messaging is where, unsolicited, the client and service can send eachother messages. Most commonly this is characterized by the service sending the client “events” or notifications or progress of “interesting things”.

Duplex Contracts in WCF

To send messages to eachother the client and service must have an idea of what operations are available and what messages are sent and received during the communication. In WCF this idea is modelled by the contract. Now normally a contract just determines what functionality is available at the service. However, now the service is going to be sending messages to the client that the client isn’t specifically waiting for so it needs an idea of what messages the client can deal with. So we need a contract that models both directions of the conversation.

A bi-directional contract is modelled using two interfaces bound together with a ServiceContract – like this:

 

[ServiceContract(CallbackContract=typeof(IPizzaProgress))]
interface IOrderPizza
{
    [OperationContract]
    void PlaceOrder(string PizzaType);
}
 
 
interface IPizzaProgress
{
    [OperationContract]
    void TimeRemaining(int minutes);
 
    [OperationContract]
    void PizzaReady();
}

The import bit here is the CallbackContract that establishes the relationship between the service’s and client’s contracts.

Writing the Service

The service is implemented normally apart from two issues: firstly it needs to access the callback contract to be able to send messages back to the client; secondly the communication infrastructure (modelled by the binding) needs to be able to cope with duplex messaging. Firstly lets look at accessing the callback contract:

class PingService : IOrderPizza
{
    IPizzaProgress callback;
 
    public void PlaceOrder(string PizzaType)
    {
        callback = OperationContext.Current.GetCallbackChannel();
 
        Action preparePizza = PreparePizza;
        preparePizza.BeginInvoke(ar => preparePizza.EndInvoke(ar), null);
    }
 
    void PreparePizza()
    {
        for (int i = 10 - 1; i >= 0; i--)
        {
            callback.TimeRemaining(i);
            Thread.Sleep(1000);
        }
        callback.PizzaReady();
    }
}

 

The critical line here is calling GetCallbackContract on the OperationContext. This gives the service access to a proxy to call back to the client.

Now the service also needs to use a contract that is compatible with duplex messaging. WSHttpBinding is the default for the built in WCF projects but it does not support duplex messaging. People generally then move to the WSDualHttpBinding which is similar to the WSHttpBinding but does support duplex. I will go into more depth about bindings for duplex shortly but for now lets stick to this for now - it will work in our test rig on a single machine without issue.

Writing the Client

If the client is going to receive these messages it needs to provide an implementation of the callback contract. It can gets its definition from either a shared contract assembly or from metadata. If using metadata the callback contract will be named the same as the service’s contract but with the work Callback appended. It will also need to supply this implementation to the WCF infrastructure and it does this by wrapping an instance in an InstanceContext object and passing it to the proxy constructor. So here is the client:

class Program
{
    static void Main(string[] args)
    {
        InstanceContext ctx = new InstanceContext(new Callback());
 
        OrderPizzaClient proxy = new OrderPizzaClient(ctx);
 
        proxy.PlaceOrder("Pepperoni");
 
        Console.WriteLine("press enter to exit");
        Console.ReadLine();
    }
}
 
class Callback : IOrderPizzaCallback
{
    public void TimeRemaining(int minutes)
    {
        Console.WriteLine("{0} seconds remaining", minutes);
    }
 
    public void PizzaReady()
    {
        Console.WriteLine("Pizza is ready");
    }
}

Running the service and the client will have this working quite happily – so it would seem that duplex messaging and WCF works very well … so why on earth do people keep asking questions about it on the WCF forums?

It Worked on My Machine but Broke when we Deployed It!

Ahh well you probably did the thing that is obvious but almost always a bad idea. You went and chose WSDualHttpBinding as your duplex binding. To understand why this is a bad idea we need to dig a little deeper into how the WSDualHttpBinding works. HTTP is a unidirectional protocol: the client makes a request and the server sends a response. There is no way for a server to initiate an exchange with the client. So how on earth is duplex messaging going to work because it requires exactly this facility? Well the “Dual” in the name is significant, the WSDualHttpBinding actually consists of two connections: one outbound from client to server and one inbound from server to client – this second connection may already be ringing alarm bells with you. The are a two big problems with inbound connections to a client: firewalls very often block inbound connections to clients; the client may not be reachable from the server, it may be using NAT translation behind a router and so cannot be contacted without port forwarding being set up on the router. Both of these issues are showstoppers in real network topologies. You can take some small steps to help – you can specify what port the client should listen on for example by using the clientBaseAddress property of the WSDualHttpBinding. This means the network admin will only have to punch one hole in their firewall (but lets face it, network admins don’t allow any holes to be punched in the firewall).

So if you really shouldn’t use WSDualHttpBinding for duplex, what should you use instead? Well NetTcpBinding supports duplex out of the box and the nice thing about this is that the outbound connection that it establishes can also be used be used for inbound traffic – suddenly we don;t have the inbound connection firewall/NAT issues. “But hold on, isn’t NetTcpBinding for intranet? I’ve read books that tell me that in their ‘which binding should I use?’ flowcharts!” Well it turns out those flowcharts are talking rubbish – NetTcpBinding works very happily over the internet, its just not interoperable by design. “Aha! but I need interop so WSDualHttpBinding is for me!” Well unfortunately not, NetTcpBinding is non-interoperable by design, WSDualHttpBinding is non-interoperable despite its design. From the name it would suggest interoperability but  Arun Gupta from Sun wrote this excellent post describing why it wasn’t.

So now seeing that we really are not talking about interop anyway, NetTcpBinding is far more useful than WSDualHttpBinding. Its not bullet proof, if the firewall only allows outbound port 80 but also allows inbound port 80, then WSDualHttpBinding would work where NetTcpBinding wouldn’t – but in this situation we’re really talking server to server and so I’d argue its probably better to roll your own bidirectional communication with two standard HTTP based connections.

The final option you have for duplex communication is to add a piece of infrastructure into the mix. The .NET Services Service Bus (part of the Azure platform) allows two parties to exchange messages both making outbound connections – potentially even using HTTP port 80. The two outbound connections rendezvous in the Service Bus which mediates their message exchanges. If the receiver has had to use outbound port 80 then it polls to receive message bound for it.

It Worked for the First 10 Clients and then the Rest Timed Out!

Irrespective if which of the standard bindings you are using, duplex assumes a constant relationship between proxy and service. In WCF this idea is modelled by the concept of session. All duplex bindings require session. A while back I wrote in some detail about sessions. You will have to either put up with increasing the session throttle (see the linked article for details) or roll your own custom binding that can do duplex without session – you can find an example of this here.

I Use the Callback While the Client is calling the Service and it Deadlocks!

This is because your client is probably a Rich Client GUI based application (Windows Forms or WPF). To understand why this is a problem we need to step back briefly and look at UI clients, threading and WCF threading. UI applications have a rule: you must only update the UI from the thread that created those UI components. In general a GUI application has one UI thread so anything that changes the UI needs to be done from that thread. .NET 2.0 introduced a new construct to simplify the process of a background thread updating the UI: SynchronizationContext. The idea is that a UI framework creates an implementation of a SynchronizationContext derived class that handles the mechanics of marshalling a call on to the UI thread. An instance of this implementation is then made available on the UI and accessible via the SynchronizationContext.Current.

WCF adds more complexity into the mix by enforcing a rule that says “unless you tell me otherwise I will only allow one thread at a time into an object that I control”. You see this with singleton services that will only allow one call at a time by default. The same is also true of the callback implementation object – so WCF will only allow one active thread in the client at a time. So while WCF is performing an outbound call it will not allow an inbound call into the object. This causes the initial problem with the deadlock that the service’s callback cannot be dispatched while the client’s outbound call is in progress. To solve this we use the “unless you tell me otherwise” part of the above rule. You do this by annotating the callback implementation class with a [CallbackBehavior] attribute like this:

[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant)]
class Callback : IOrderPizzaCallback
{
    public void TimeRemaining(int minutes)
    {
        Console.WriteLine("{0} seconds remaining", minutes);
    }
 
    public void PizzaReady()
    {
        Console.WriteLine("Pizza is ready");
    }
}

But now there is another problem: by default WCF will attempt to dispatch using an available SynchronizationContext. The problem with this callback is the UI thread is already blocked in an outbound call. SO for the call to dispatch we need to tell WCF not to use the SynchronizationContext – again using the CallbackBehavior attribute:

[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant, UseSynchronizationContext=false)]
class Callback : IOrderPizzaCallback
{
    ...
}

Now the issue is of course that the call is going to be processed on a non UI thread so you would have to manually marshal any UI interaction using the SynchronizationContext.Post method.

Duplex messaging can be a useful message exchange pattern but in WCF there can be some unexpected issues. Hopefully this blog post clarifies those issues and demonstrates workarounds for them.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 1/19/2010 8:44 AM | Comments (0)

One of the most highly anticipated of the new technologies coming in .NET 4.0 and Silverlight 4.0 is the Managed Extensibility Framework (MEF). Folks that are familiar with Prism and that have been looking at MEF have been wondering how Prism and MEF relate to each other. At a high level, MEF shares some of the same goals as Prism in terms of supporting easy to extend applications, and this has led to a lot of questions on how MEF and Prism relate to each other and about the future direction of Prism once MEF is released next year. Hopefully this post will go a long to clearing up the confusion and give you a sense of how we think Prism and MEF will work together.

First of all, it’s important to note that Prism and MEF are very much complementary technologies. MEF allows you to create extensible applications by providing support for automatic component discovery and composition. It does not focus on application- or UI-level patterns or on any specific UI technology. Prism on the other hand provides support for creating modular composite client applications built on Silverlight and/or WPF. As such it supports a wide range of patterns including the higher level UI patterns and concepts that are need to support composite clients – such as modularity, module deployment, loosely coupled communication, commanding, and separated presentation patterns such as Model-View-ViewModel, etc.

There is clearly some overlap between MEF and Prism (since modular composite client applications are by definition extensible!!) but MEF by itself in no way replaces or obviates the need for Prism – they are each targeted at different parts of the overall puzzle. MEF in fact is fantastic news for Prism, because it means that we can now leverage core capabilities that are provided by the .NET Framework, whereas in the past we’ve had to build those capabilities as part of Prism itself.

Prism 4.0

In the next version of Prism (Prism 4.0) we’ll be focusing on leveraging MEF as much as possible and ensuring that Prism and MEF work seamlessly together. We’ll be kicking off the Prism 4.0 project early next year and, as always, we’ll be providing drops every two weeks during development so you’ll be able to provide feedback and direct the scope and focus of the project as we go. But since MEF integration is likely be one of the first things that we’ll tackle, I think it’s worth describing our current thinking on how we think Prism can leverage MEF and how they can complement each other so that you can provide feedback to us before we start. In the rest of this post I’ll outline a couple of the areas where I think MEF and Prism can be closely integrated. Let me know what you think.

Component Composition

Firstly, let’s talk about component composition. Prism uses the Dependency Injection pattern (DI) quite extensively because it helps to maintain loose coupling between the various components in an application. I’m not going to get into the “is MEF a DI container or isn’t it” discussion here :-) but suffice it to say that there are similarities and differences between the way MEF works and the way that typical Dependency Injection containers work. The upshot is that there are things that MEF does well and there are things that DI containers do well, but the important thing is that both MEF and DI containers promote loose coupling between components, which is a very good thing.

In the Prism 2.0 Quick Starts and the Reference Implementation we use the Unity Application Block as our DI container of choice. However, it’s important to note that the Prism code libraries themselves do NOT depend explicitly on Unity, or in fact on any specific DI container implementation. This is an important point. It was an explicit design decision to allow the use of any other DI container (such as CastleWindsor, StructureMap, AutoFac, Ninject, etc) or the use of any other kind of component composition strategy that suites your needs – such as the component composition strategy supported by MEF!

So the design of Prism allows you to use MEF with Prism 2.0 today, even though Prism 2.0 was shipped early this year way before MEF was broadly available. It’s pretty easy to use MEF instead of a DI container within a Prism module to help you wire up Views, ViewModels, Controllers, or Presenters, or to get references to EventAggregator or RegionManager instances provided by the Shell. In fact, using MEF like this can actually simplify the code somewhat since it can automatically discover available types without you having to register them explicitly with the DI container. You can also use MEF’s meta-data support to do conditional component composition. We’ll be exploring and providing guidance for these scenarios in Prism 4.0.

Another interesting possibility is to use both MEF and a DI container together in the same application. There are some advantages to this since it allows you to leverage the strengths of each in various situations. In fact, Unity 2.0 (which is currently in development as part of EntLib 5.0) will support the hybrid use of MEF and a DI container and make it seamless and straightforward. In Prism 4.0, we’ll be exploring and providing guidance for the use of MEF + DI container hybrid approaches in the context of composite client application development.

Catalogs and Modules

The use of MEF and/or DI container to help with component composition is pretty straightforward, and largely independent of the higher level constructs and patterns in Prism. But one area where the overlap between MEF and these higher level Prism concepts is not quite as clear cut is in the area of Catalogs and Modules. This area has caused some confusion in part because of overlapping terminology and, in some cases, because of the similar concepts applied at different levels of granularity.

To recap, Prism uses the notion of a module to represent a collection of features, components, and resources that make up a functional unit within the application. Prism modules can be developed, tested and deployed independently. They frequently consist of multiple assemblies and other resources packaged up into an easily deployable unit (for example in a XAP file). Prism provides infrastructure for the flexible deployment of modules. In the case of Silverlight, for example, modules can be downloaded with the core application, or can be downloaded in the background or on-demand.

Prism applications use a module catalog to tell it which modules to load. Module catalogs can be static (i.e. the list of modules is predetermined before run-time) or dynamic (i.e. the list of modules is determined at run-time and can take into account the user’s ID, role, configuration, installed modules, wind direction, etc). Dynamic module catalogs can be used to extend an application after its initial deployment. They can be implemented in many different ways. For example, you can build a dynamic catalog by reading a (local or remote) config file, or by using a web service that specifies the modules to load, or by scanning a particular folder to see what modules have been installed.

Once a module is loaded, Prism looks for an entry type that supports the IModule interface. This interface has only one method – Initialize – and can be used to provide any initialization logic that the module provides. Typically, this method is used to register types within the module with the DI container so that they can be accessed by other modules and the shell. Another common use of this method is to register Views contained within the module with UI regions. The module can do anything it needs to though, including kicking off background threads, making web service calls or downloading additional data or resources. Of course, you don’t have to provide any initialization logic if your module doesn’t require it.

Now, MEF too has the concept of a component catalog. When you import a type in MEF (i.e. you’ve expressed a dependency in one class to another class of a certain type), its resolves that type by looking in the MEF catalog which defines all of the types that are available for export (i.e. types that can be used by MEF to satisfy imports). This is a very powerful feature of MEF and allows you to express dependencies between components and have them fulfilled for you pretty much automatically, without having to explicitly register types with a DI container or having to resort to closely-coupled techniques like ‘new’ or CreateInstance. Note, I say ‘type’ here to keep things simple but MEF generalizes the relationship between importer and exporter using contracts, but contracts most often equate to types, and types can be interfaces.

So Prism module catalogs are really not the same as MEF catalogs since they’re specifying things at completely different levels of granularity. In addition, MEF does not provide any support for the packaging or conditional deployment of functional units within an application. However, there is clearly some overlap here since, at a lower level, Prism modules essentially contain a bunch of components that can import and export types so that they can be hooked up to components from other modules or the shell.

You can imagine using both Prism module catalogs and MEF catalogs together. The key here I think is for Prism to focus on the packaging, deployment and activation of coarse grained functional units (modules), as defined by either a static or dynamic module catalog, and to use MEF to support the flexible, meta-data driven composition of components within and across modules and the shell.

For example, imagine using Prism to build modules that represent functional units within an application and having it take care of their packaging and deployment via a dynamic or static module catalog. As each Prism module is loaded, the component dependencies within it (i.e. imports and exports) can be made available to MEF for component composition. In a sense, each module represents a catalog of components that MEF can use to fulfill and resolve component dependencies. There are other possibilities I am sure, and we’ll be exploring these as part of Prism 4.0…

Prism 4.0 Needs You!

Our goal for Prism 4.0 is to leverage MEF, and other .NET 4.0 and Silverlight 4.0 features, as much as possible so that we can provide a flexible and powerful environment for building modular, composite client applications on WPF and Silverlight 4.0. MEF is an exciting new technology and it’s great to see some level of support for loosely coupled component composition finally make it into the .NET Framework. I’m looking forward to exploring the possibilities here and I think it’s going to be pretty cool…

As well as MEF integration, for Prism 4.0 we’re looking at also providing more guidance on the ViewModel pattern, navigation, out of browser applications, developer/designer workflow, user experience patterns, visual studio templates, and a whole host of other areas. Which ones we tackle will depend on you, so as always, if you have any ideas or feedback, please let us know!

This post was originated by David Hill.  The original post, comments and further discussion can be found here: http://blogs.msdn.com/dphill/archive/2009/12/09/prism-and-mef.aspx

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Posted by blockwood on 1/7/2010 1:16 AM | Comments (0)

Here is one of the best talks I've seen so I wanted to share.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5