Do you have any ideas about preparation for 70-529?
As you may know, I'm coauthoring http://www.microsoft.com/learning/exams/70-529.asp. In particular, I'm covering the following objectives:
Create and configure an XML Web service method.
- Create a public method.
- Attach the WebMethodAttribute attribute.
- Create a OneWay Web method.
- Configure a Web service method.
|Call Web methods asynchronously.
- Call a Web method.
- Poll for the completion of a Web method.
- Get Web method results.
- Implement callback.
- Call a OneWay Web method.
|Call remoting methods asynchronously.
- Implement one-way methods by using the OneWay attribute.
- Call a remote method asynchronously.
- Implement callback.
|Implement events in remoting applications.
- Create and fire events.
- Implement event handler for the events of a remote object.
|Enable WSE in client and server applications.
- Add references to WSE assemblies in client applications.
- Edit the Web service proxy class to derive from the WebServicesClientProtocol class.
- Add a <soapExtensionTypes> element under the <webServices> element in a configuration file.
- Add a <configSections> element to add the <microsoft.web.services3> section to a configuration file.
|Add a digital signature to a SOAP message and verify an existing SOAP message signature.
- Sign a SOAP message digitally.
- Verify a signed SOAP message.
|Encrypt and decrypt a SOAP message.
- Encrypt a SOAP message.
- Decrypt an encrypted SOAP message.
|Implement a policy for a Web service application.
- Create a policy file manually.
- Declare the set of policies in a policy file.
- Map policies to SOAP endpoints.
- Configure a policy file in a configuration file.
- Create and enforce a custom policy.
- Create a policy file by using the WseConfigEditor3 tool.
- Set a policy in a client application and in a client computer.
|Implement filters in a Web service application.
- Add a filter.
- Remove a filter.
- Shuffle the order of the filters.
- Enable the Trace filter.
- Create custom input and output filters.
After getting the original drafts done, I've received some excellent feedback from my technical reviewers. I've been interested in how best to coverage a few things and would really like your feedback. If you're interested in taking this exam, here's your opportunity to have some influence about how certain issues are covered. Moreoever, I welcome general feedback about any of the above items and will take any and all feedback into consideration. I've already written the chapters but in between now and the time the final is ready, I have an opportunity to make changes and am very interested in getting reader feedback. As such, even if you have feedback unrelated to my specific questions below, please feel free to write me about any comments or questions you have and to the best of my ability, I'll respond accordingly (However, if you're looking for specific questions in an effort to cheat on the exam, don't bother, seriously don't waste my time or yours. I have no interest in helping anyone cheat and to be honest, I never dreamed anyone would even ask me to help them cheat. So let me save you some time if you want me to recommend the best brain-dump or want me to give you questions [or sell them] <explitive> <explitive> <explitive>).
These questions go from the least important to the most - some of them are just about readability and setup.
1- The Web Services and Remoting projects all have a client and server component at a minimum. Some of them have middle-tier components as well. My current way of creating them was to create a blank solution and add projects to it. This was largely done as habit from the old days when web services/asp.net projects were treated essentially the same as other projects. Since that's changed now in many respects and code files are supposed to go in the app_code folder, does creating a blank solution and adding client/middle-tier/server to it still make sense? I'm thinking it does mainly b/c the solution and projects will be clearly delineated with different names. I've heard a good number of questions about how to 'properly' structure web sites and services based on the new structure and I don't want anyone to get confused. At the same time, if you're looking to get certified, you've probably already noted the new behavior of VS.NET so I'm not sure it matters.
2- If you've used anything by MS Learning a la Microsoft Official Cirriculum, you get a setup project and it installs all the files and folders for you. There's typically an HTML file that serves as the navigation mechanism for the contents. This style is used throughout all of the MOC's that I've used but most other books typically just have the code broken out by chapter. How important is it to have a clean navigation mechanism that matches the chapter outlines and specifically, does having an online version of the review questions and answers available at the end matter? With many of the cert exam guides I've used, I've used old school notebooks to write out my answers and then go through and drill on them - but having an online version, particularly with a Tablet PC, I'd probably prefer having a HTML mechanism. What do you think? What's the most effective format for associated code that you've come across? What do you think makes for the most effective way of drilling questions?
3- When you add a Web Reference, Visual Studio .NET creates a proxy for you. I've come across quite a few people that were unaware that an actual class was created for you which is what you actually instantiate and work with. In case you're unaware of how this works, you can look at the Web References in the Solution Explorer. From there, you can expand the reference itself (typically named localhost). Inside that node is a Reference.map file. If you have the "Show all Files" option selected, you'll see a file typically named Reference.vb or Reference.cs which is the actual proxy class. You can interrrogate the code that's generate for you via this file and it helps you diagnose quite a few possible problems - or if you're like me and like digging around through stuff, it can defintely help you make sense of things. When I first learned .NET Web Services a few years ago, digging through these files helped me get my arms around the whole process. Anyway, this proxy is something that you may never need to look at and although it's a critical piece of using web services, it's not directly listed as an objective or sub-objective on the exam [NOTE: I'm not making any statement about whether or not this is on the exam]. So if I mention it, I probably need to discuss it in depth. On the other hand, since the generation of the proxy isn't an objective/sub-objective and this is an Exam Prep guide not a book on web services in general, I'm not sure how much I should discuss. I've got differing feedback ranging from "Don't waste readers time even discussing this other than saying it exists" to "If this is critical to understanding how WS works, then make sure it's explained in enough detail that people truly understand it." I can see both sides of this one and think both cases make a lot of sense. So what do you think? Would a page discussing this suffice? Or would you prefer seeing all the imporant nuances [Like an examples showing how to edit it and the effect editing has on client code] discussed? Since this is autogenerated, I lean toward the former, particularly considering that it's not an objective, but like many things, knowing how something works under the hood can be critical to learning how to think your way through problems. I just don't want to bore people with it and of more concern, I don't want to give the impression that the inner workings of code generation in VS .NET is critical.
4- One of the cooler features of WS 2.0 is the abilty to host the runtime outside of IIS. So if you weren't aware, you can host a web serivce inside of a winforms app or windows service. A few people have suggested that this is a major issue and while it's mentioned a lot, good, real world examples are in short supply. I've used MSN Search and found quite a few examples that seem real world to me but admittedly, it's a big feature. How important is having an example of using a Windows Service/Console App/Winforms app etc to host a web service?
5- WSE 3.0 - Virtually every example on WSE 3.0 that I've come across is based on the Stock Service example. Most of the examples are based on the same scenario (which was also used extensively in WSE 2.0). I like this example and having a consistent framework is helpful. On the flip side, there have been many times when I've been learning new stuff that seeing different variations has been what's made it click for me. What do you think? Is it best to stick with the well documented Stock service or would something like passing encrypted, digitally signed Excel documents [or some other file type] using MTOM be better?
6- Web Service Delegates - Built in delegates are a critical part of using Web Services. However in many ways, there's not much different between invoking a web service asynchronously versus any other method asynchronously. Other than just covering how to do it, how much focus needs to be placed on the delegates? (Remember, this is the Distributed Applicaitons exam so basic delegates are already assumed to be understood by the time you get here.
7-Remoting Events - Since Remoting changes the landscape quite a bit, particularly with respect to events, most of the conventional wisdom is "Don't use them in remoting unless you have a compelling reason to do so." In fact, with WCF, the whole focus is shifting toward messaging vs remote object creation. Creating events and raising them, wiring them up is so different that creating the projects to handle them is pretty involved. It's not necessarily 'hard' but it is involved. On a scale of 1-10, how much effort should be put into covering events?
Anyway, please feel free to let me know what you think about any/all of these. I'd prefer that you post publicly just so others can benefit from the discussion, but if you want to respond privately I'm ok with that. If you do respond privately, please let me know if you're ok with me mentioning any part of your response. I'll keep everything related to this post confidential unless you explicitly tell me otherwise. I'm really interested in getting feedback about these b/c unlike 536, a lot of this can get involved quickly and I don't want to end up adding confusion without adding value. If there's something you feel strongly about that's not in the list of questions here or in the above objectives/sub-objectives, I'd love to still hear your opinion. I'll gladly forward them on to my co-author(s) who's writing on the subject although I can't make any promises about whether or not it will get implemented. I'll definitely take all feedback into consideration though.