Welcome to MSDN Blogs Sign in | Join | Help

Pair doc writing

Pair doc writing

That's write folks! (haha) Just minutes ago I heard through the wall what I've come to recognize as "productivity in action" and I thought it might be valuable to capture and share with you. In this photograph we're witnessing a first hand account of a dev lead, Bob Brumfield (left), a product planner, Glenn Block (center), and a technical writer, Nelly Delgado (right) huddled around a monitor talking about the best way to structure the documentation on Prism. I love seeing this level of teamwork and common purpose.

But what I love about this picture is how it illustrates Nelly's complete mastery of her role as a tech writer (relaxed, in a director capacity, letting someone else do the manual stuff): getting the others to do some writing. Well, I guess she could be manifesting complete and utter frustration at Glenn's incessantly obstinate comportment ... nah. Go Team!

Posted by donsmith | 5 Comments

WCF Security Guidance

If you're looking for pragmatic guidace for securing your WCF services, look no further. The WCF Security project has been posting how-to documents and videos on its community site.

Now is the perfect time to give the team feedback. They aren't done yet and are completely willing, able, and even looking forward to apply your feedback so this can be the best resource on the 'net for WCF security questions.

If you want more details about the project, check out J.D.'s post before you head over to get the goods.

Using MessageContracts and DataContracts

Users of the Service Factory often ask about the rationale behind the required use of MessageContracts even though the use of MessageContracts aren't mandated by WCF. I've answered this question in other venues, but it seemed like a good thing to put here in case I need to point others to it in the future.

If you ask the WCF product team when you should use a MessageContract versus a DataContract, their guidance usually revolves around the level of control you need over the message - like when you need to use custom SOAP headers*. You can find more detail in this topic of the WCF documentation. Their guidance makes complete sense if you think about the motivation they had when building WCF: to unify all of the Microsoft communication mechanisms into a single approach that is relevant to all scenarios. This is great for someone who has traditionally only done object-oriented or component-oriented development. They can be successful without understanding the nuances of building Web services.

In our experience one of the biggest hurdles for many developers who are new to Web services has been the concept of the message - rather than just passing around types like they've always done. You can characterize this distinction as implicit versus explicit message design. We have a topic in the Service Factory documentation that touches on this distinction. I think there is some room for improvement on this topic, but you can find it here nevertheless.

However, the confusion over a message isn't the only reason we elevate the importance of the message and recommend these usage patterns. We intentionally draw a clear distinction between types (both primitive types like string, and complex types like Customer) and messages (like ProcessExpenseReportRequest). From our perspective, DataContracts represent types and types are reusable. Messages are not used as types but rather the payload a method operates on - and it is not reusable since they are specific to the operation they are passed to and from. This level of distinction provides architects and lead developers a means of achieving better consistency throughout their organization by being more prescriptive about reusability.

I am aware that Juval's position is that MessageContracts are rarely needed. And, I hold Juval in the highest regard - I've not yet had an opportunity to learn what is motivating him to take this position. Some might argue that MessageContracts are just an additional (unnecessary) level of redirection. I can understand this point of view. We just feel the benefits greatly outweigh this nominal cost, and the feedback we've received from customers has been completely supportive of this approach.

* In my opinion, there is only one reason you would need to create a custom SOAP header that isn't already defined by a standards body like WS-*. (hint: if it's already defined elsewhere, you should use it to ensure interoperability, instead of "rolling your own") And, that reason is if you need to pass around localization information (like "en-us"). I don't think this is covered by any WS-* or other spec.

Pretty Impressive Management

I was pretty impressed by something my manager did recently. I've shared it with a few other people, but I think this is noteworthy enough for a blog entry. My hopes are that other mangers will be equally impressed and carry out similar acts.

My manager (we'll call him Shaun ... since that's his name) and I were talking about career development during one of our weekly one-on-ones about 8 months ago and I mentioned to him that I would really like to take on some direct reports and more responsibilities at the group-level (of patterns & practices). I've always enjoyed seeing people succeed and am ready for my job to allow me to have a more direct opportunity to influence that more. I've also been in p&p for almost 3 years now and feel I have a deep understanding of what we do and how we do it.

I really shared this with him so he would know what I was thinking - not because I expected him to do anything about it. Actually, I didn't think he could do anything about it. You see, p&p is a small group - only about 30 full-time Microsoft employees. In other words, there is no way for me to move up and stay in p&p unless another manager slot opens up, which isn't likely, or Shaun leaves his position, which I also didn't think was likely. Shaun was basically the second employee of p&p - he and Mike Kropp founded the group.

Of course Shaun also knew there wasn't anywhere for me to go if I wanted to stay in the group (which he knew I absolutely wanted to do). Imagine my surprise when I found out that it was around this time that he began looking for other opportunities outside of p&p. Fast forward to today. Shaun has found a very challenging role in another group in Microsoft and has named me acting* Senior Product Planner. After this week, I will be honored to have Glenn, and Grigori reporting to me and I'll have to hire my replacement (let me know if you're interested).

When he told me that it was my desire to move up that caused him to reevaluate his situation, I was more than impressed. Yes, Shaun has been a fantastic manager (Glenn and Grigori agree) and it is this kind of act that speaks volumes about the kind of person and manager he is. I'm not so naive to think that my desires are the only thing that motivated him to move on, but knowing it was a factor is impressive enough. It's very different from the "yeah, I'll get to move up when Joey Stayput dies" situation we always hear about.

Thank you Shaun. I have some great shoes to fill and I promise do my best.

* Right now p&p doesn't have a leader. Once one is appointed (hopefully in the next 2 weeks) he will decide if I take on the role completely or if he would rather hire someone else into it. So until then, I'm just "acting".

Posted by donsmith | 2 Comments
Filed under:

Roger joins the fray ... w00t!

My good friend Roger Lamb has just joined the blogsphere and I assure you that if you are interested in anything remotely related to Sharepoint, you'll want to subscribe now. Check out his first post.

You see how I just did that? How I increased your expectation, and thus, his commitment around his blog?

Isn't the blogsphere wonderful? haha

 Welcome to the chaos bro!

Influence MSF guidance

My colleague, Andrew Delin, is making the process of developing software real for development teams. However, he doesn't want to do it in a vacuum. If you think you know anything about development processes, I'm sure he'd love to hear from you. http://blogs.msdn.com/processblog/archive/2007/09/25/so-tell-us-what-you-think-about-the-msf-guidance.aspx. Thanks.
Posted by donsmith | 3 Comments
Filed under:

Service Factory Customization Workshop

Microsoft Main Campus (Building 20)
July 30th – Aug 1st 2007
Redmond, WA

Description

Many software factories being built today use a number of different technologies, which include the Guidance Automation Extensions (GAX), the Domain Specific Language (DSL) Toolkit, Visual Studio extensibility components, and a few other additional utilities. This is definitely true for the Web Service Software Factory: Modeling Edition. Much of the feedback we’ve received about these technologies, with regard to building and modifying software factories, revolves around the difficulty of customizing them. More than 40% of all users of the Service Factory will change it in some way before using it to build Web services. Typically, this is done to specialize it for some additional requirement or customize it towards a specific customer domain (i.e. industry vertical). Requiring development teams to know these technologies at any technical depth, beyond what the factory itself provides, justifies any effort to make the customizations as easy as possible.

This 3 day workshop will walk you through the comprehensive process of adding a new model (an entity model) to the Service Factory: Modeling Edition. You will become very familiar will all aspects of the factory infrastructure: DSL models, recipe automation, model validation, cross-model references, model views, project mapping, technology extenders, code generation, and factory deployment. Because the workshop will be hosted by the Service Factory team and other Software Factory experts, you will also have the opportunity to ask questions, and get a glimpse into the future of the software factory platform.

Purpose

  • Transfer knowledge from factory experts to attendees about building software factories on today’s technologies with insights on how these technologies are changing in the future.
  • Transfer knowledge from the attendees to factory experts about the most important and common types of modifications necessary to build other software factories.
  • Design hands-on exercises for others in the software factory community to learn from

Prerequisites

  • This should be considered an advanced workshop. It is highly recommended you have a working knowledge of GAX and the DSL toolkit. There will be some introductory content around the technologies, but there will be a heavy focus on writing C# source code. It is recommended you have reviewed the source code of the most recent Service Factory v3 pre-release (v3b87).
  • You must bring a laptop and a VPC will be provided. If you can have Microsoft Virtual PC installed ahead of time, it will save you from having to install it after you arrive. This will prevent you from having any other system requirements on the machine.
  • If you plan on attending, please have a number of changes you would like to make to the factory in mind. One of the main reasons we’re hosting this workshop is to be sure we understand what the most common and important customizations are (so we can make it as easy as possible). We will ask you to define your scenarios at some point while you are here.

Agenda

  • DSL modeling
  • Recipe automation (GAX)
  • Model validation
  • Cross-model references
  • Model views (tool windows)
  • Implementation project mapping
  • Technology extenders
  • Code generation framework
  • Factory deployment
  • Factory futures

Cost

  • There is no registration fee for the workshop.
  • Attendees are responsible for making and paying for their own travel to and from bldg 20 in Redmond, WA.
  • Attendees are responsible for their lodging accommodations during the workshop. Suggestions can be provided after registering.
  • Breakfast and lunch will be provided on all 3 days and a dinner event will be provided on Tuesday night (July 31st).

Registering

We apologize for the short notice, but please register by July 27th so we can ensure your ability to attend. Attendance is limited to 60 people so please RSVP by sending an email to Don Smith as soon as possible. In the email, please provide the following information about each attendee:
  • Full name
  • Company name
  • Email address (required for internet access)
  • If a vegetarian or high-protein lunch is required
Please email Don if you have any questions.
Posted by donsmith | 4 Comments

A time for reflection and assessment

Wow, it's hard to believe it has been almost a year since the patterns & practices team released our first software factories. Remember when the early customer previews were called Baseline Architecture Toolkits? Oh, the nostalgia :) We could have had so much fun with the BAT acronym ... haha.

So that means now is a perfect time to take a quick assessment on how we're doing so far ... that's right, a survey. Now hold on a second! At least hear me out for the rest of the paragraph. I can't devulge too much detail yet, but some team in Microsoft might be in the middle of building some serious software factory infrastructure for a future version of Visual Studio - that's right, much better than GAX and DSL tools. Do you want it to suck? Do you think software factories are just a pipe dream and would rather they build something else? If you're thinking, "Oh no Don, I like software factories, especially the Service Factory (okay, I'm embellishing - haha)," then I would ask you to keep reading. I promise we've tried to optimize the survey to allow you the highest level of impact in the least amount of time possible.

Whew, you're still reading ... excellent! Okay, so you're only looking at 9 generic questions and 9 questions for each software factory you've evaluated/used. This survey covers the 4 factories released by p&p (web service, smart client, web client, and mobile client). The first 8 questions will take no more than a minute or two. The 9 questions for each factory shouldn't take more than 10 minutes each and you will only see the questions for the factories you choose. The last question is an anything-else-you-want-to-share question - you can take as long as you want on it. That's it ... super quick-n-easy.

Here is the URL you need to take the survey: http://www.zoomerang.com/survey.zgi?p=WEB2266YYVWSKP

We're really looking forward to your feedback so we can help the future include some truly kick-ass factories.

Posted by donsmith | 9 Comments

First Service Factory v3 Community Drop

Okay, we're off and running now. Earlier today I posted the first of many community drops for Service Factory v3 - don't let "build 19" fool you - this is the first one. It took us longer than expected to get this one out the door, but we're all set now.

I suspect the first question you have is "What is so specially about this release?" Fair enough question. Well, probably the biggest thing is the addition of models. This alone accounts for most of the improvements over v2. I'm not going to go into too much detail here (there will be plenty of time for that later), but here are the high points:

  • Now Visual Studio has a memory about your decisions. In v2 you place your decisions in wizards. In addition to models, there are still wizards, but it's the model that "remembers" so you can generate code anytime you like.
  • Now you have a visualization of the application you are building. The designers provide this. Right now there are 2 designers/models. The first screen shot below shows the one for service contracts and the one after that shows data contracts.
  • Now you can delay the platform decision (WCF/ASMX/etc) and the language decision (C#/VB/etc) until as late as you like (way after you define all the service, message, and data interfaces.
  • With this version there is also no assumption that you have already define the service contract before you start using the factory. You can either approach the solution from a capability perspective (dropping operations on the service contract designer) or from a data perspective (dropping data contracts on its designer).

Here is what they look like (I added the thin red boxes):

Service Contract Designer

Data Contract Designer

I'm trying something new during this release by including a "start here" document and a "walkthrough" document for each drop. I'm hoping this will:

  • Save you lots of time in evaluating this drop.
  • Set your expectations around how much time you will need to evaluate the drops.
  • Provide you a very directed way to provide feedback about the drop.
  • Give you an easy way to see what the new features are every 2 weeks.
  • Let you know what the known issues are with each drop.
  • Get me more high quality feedback so I'll know we're building the best, most appropriate Service Factory we can for you.

So please use these docments and give me your thoughts about them.

You can expect new community drop every other Friday until the end of October (unless something really unexpected happens of course).

Download Service Factory v3 Community Drop 19 here

 Looking forward to your feedback ...

Now Available: Aaron's new Service Factory article on MSDN

Steven just told me that Aaron Skonnard's latest Service Factory article about the December release was just published through his Service Station column in the MSDN Magazine. Talk about timing ... sweet. 

Even though it was written and finished before we locked down the code, it is still very accurate and comprehensive. I mean, it's Aaron ... what else would you expect?! There a few minor places where we changed the code out from under him so if you have a question about anything in it, feel free to leave a comment here and I'll field it.

Oh, and if you're building ASMX services, be sure to check out his first Service Factory article about the July (ASMX) release.

Great job Aaron!

... come and get yer Service Factory!

That's right ladies and gentlemen, the December release of the Web Service Software Factory and a VB.NET version is now available for your consumption, modification, and production pleasures :)

Okay, I'm just going to do 3 things in this post since I know there will be many more to follow:

  1. Lay some links on ya. For downloading the Service Factory releases and more info.
  2. Share my favorite new features of the Service Factory with you.
  3. Give you a sense of what is to come in the near and not-so-near future.

Links

Favs

WSDL-first support. This feature definitely wasn't the most challenging to include, but I still love it. I've spent a lot of time over the years monkeying around with WSDL files. The fact that Service Factory has a single recipe (wizard) that will take a single WSDL and generate the service interface, service implementation, binding configuration (config file), and all of the associated DataContracts/XmlSerializable types is just freakin' sweet. You have to see it even if you don't define all your contracts in WSDL first.

Versioning guidance. This is a favorite of mine because ... well, I wrote it haha. No, seriously ... it's no secret this is a topic that is near and dear to my heart. I have labeled the topic "emerging guidance" in the Service Factory documentation because I want to gather more evidence from customers that this approach is actually working for them before I propose we call it a "proven practice". I have spoken with a number of customers who have taken this approach and it is working well for them. I haven't spoken to anyone it didn't work for, but I'd love to hear from you. If you're interested in reading or sharing, I've also posted the topic on my blog here. Personally, I think the "strategy" section of the guidance is still weak on content, but more on that in the "futures" section of this post. I also plan to do a webcast on it.

WCF Code analysis. This one turned out to be the sleeper feature - we didn't expect this to turn out so sweet. As you may know, FxCop has been integrated into Visual Studio 2005 under the name Code Analysis. Well, we took all of the same rules that used to be the Security Analyzer back in the WSE days and converted them all to code analysis rules. They also work against the code AND the config files (something FxCop hasn't done historically). I know, pretty sweet, huh? Well, when we showed this to the WCF team, they asked if we could include some of the rules that they fire at run-time so they could be run at design-time (like the ones that make sure all the binding stuff is consistent). "Sure", we said. So there are about a dozen of them too ... and it's all integrated into Visual Studio ... even if you're not using Service Factory.

Recipe runner. Okay, now I'm cheating a little. This isn't actually a feature ... and it's not really included in Service Factory. One thing we learned while building the July release was that testing GAX recipes is feakin' hard. Well, harder than it should be. So the team took a couple of months at the beginning of this version to get it right. The result is something we call RecipeRunner. Those of you who are creating your own recipes or heavily modifying the ones we provide will really like this if you care about testing, which you should. We'll be making it available on the community site in the near future.

There are loads more things that are new and way cool in this release, but I want you to discover some of them for yourself too. Of course I'll be mentioning them as time goes on and in some mini videos. Oh, that brings me to the last item on my agenda.

Futures

Blogcasts. The very next things you're going to start seeing are more of the blogcasts I did some months back. Many of them are outdated now and I need to do more of them now that the WCF Service Factory has released. The feedback was very positive (thank you) and because I claim to listen to you, I promise to do more of them shortly.

HOL exercises. I've already began the process of converting the existing hands-on lab (HOL) to WCF. Additionally, we'll be adding a bunch of new exercises. What I need from you is some details so we're sure they are helpful. This is what we have in mind:

  • Modifying a guidance package - There is already a how-to in the Service Factory documentation, but customers are always telling me they need more help. If you tell me what kind of changes you're making to guidance packages I will try to create an exercise that illustrates how to make that change.
  • Building a service agent - A service agent is that layer of code on the consumer side that invokes the proxy (that's right, you're NOT suppose to do it in the button's click event handler :). It manages things like retries, response caching, offline support, asynchronicity, etc. I need you to tell me what kind of challenges YOU (not your neighbor) need. That will help me get this exercise right.
  • Versioning - this will build on the topic I mentioned earlier and will walk you through how to evolve a service in a number of ways.
  • Message validation - The reference implementation already illustrates this. But would you find a HOL exercise valuable? If not, cool, I'll spend that energy somewhere else. If so, also cool.
  • Exception shielding - The reference implementation also illustrates this. Same question ...
  • Create a code analysis rule - I think this is also covered in the VS documentation, but I've never looked for it. Are you going to be writing your own rules? If so, would you find a HOL exercise helpful?
  • Workflow Foundation - we actually did a lot of work with this, but had to pull it at the last minute (yeah, sometimes cutting scope at the last minute hurts). We might be in a position to create an exercise as a result of what we already have. We'll see.

v3 planning. We have already began the planning process for v3. But because we JUST started, we don't have a lot to share just yet. I can tell you (if you didn't already guess) that a service domain specific language (DSL) is the primary theme of the next version. I will be sharing everything with you around the features and their priorities as soon as we have something to share. As always, we'll be counting on you to steer us where you need us to go. All of this communication will naturally happen on the Service Factory community site, which will be moving to CodePlex in the very near future. More on that later too.

Okay, it's getting late and the weather is getting nasty so I'm heading home. Until next time, you have a lot to keep you busy :D Looking forward to your feedback. Thanks!

Installing Software Factories on Vista

I noticed Tom blogged about this a couple of days ago, and of course he is correct, but I just wanted to mention the approach I've been taking since it has been working so well for me.

The specific point in the installation that fails is during the registering of the guidance packages with Visual Studio and of course it is a result of the UAC security features of Vista. The error code is 2869 and looks like this:

Basically, the installer is doing naughty things and Vista don't play that. Kudos to Vista for doing the right thing, but I can't promise we will be able to fix GAT/GAX in the short term. I can tell you, however, that we'll do our best to address this issue in the future versions of the software factories next year. Now on to the work-around.

Even though Vista will do the "administrator prompt thing" shortly after install (if you just run the MSI), it is still not good enough for the installation to be successful. I think it might have something to do the fact the installer is spawning up an instance of devenv.exe (told you it was naughty), but I don't know - because forcing devenv.exe to always run as admin didn't seem to help either. But this does ...

Start up a Visual Studio 2005 command prompt as administrator:

Once the command prompt is open, just navigate to the folder where you've downloaded the MSI to and run msiexec.exe /i on it:

If you do this, it should work with no issues. I and others have done this several times and it's worked for me very reliably. Good luck!

Posted by donsmith | 14 Comments

Handcrafting WCF-friendly WSDLs

It's 10:15 pm and I'm still in the office, but I really think I should get this entry posted before I head home - or it won't ever get posted. I was supposed to be working on my demo for my Service Factory session at the SOA Conference tomorrow, but I got side-tracked early in the day when I started playing with a new feature of Service Factory (that I'm going to demo). This new recipe (hereforth referred to as "the new recipe") allows you to create the service interface, data contracts, and a stub of the service implementation from an existing WSDL document. Yeah, pretty cool, huh? Of course you can do the same thing in svcutil if you have the .NET 3.0 SDK installed, but you have to leave Visual Studio and head off to the command prompt - and it won't separate the parts into multiple files and place them in the appropriate projects.

As I'm sure you've already realized, we've added this feature for the masses who have adopted a contract-first approach to building services. Unfortunately for these masses, the object model you have to code against after you've generated code from your existing WSDLs (using either svcutil or the new recipe) is not as enjoyable as what you get with the code-first approach WCF and its DataContract offer. I'm hoping this entry will add some clarity for those of you who wish to have the best of both worlds: Contract-First and DataContracts. First, let's talk about the DataContract.

The DataContract

Rather than start from ground zero with DataContract basics and the DataContractSerializer, I'm going to recommend you go read Aaron Skonnard's excellent Service Station article on Serialization in WCF before continuing. Okay, now that you know DataContract only supports a subset of XML Schema, let's get more specific about this "subset". I am in no way stating that this is a complete list, but these are the things I've personally been able to verify. If you use any of the following constructs, svcutil and the new recipe will fall back to creating XML serializable types (like the ones in ASMX) instead of DataContracts.

  • <xs:element ref= ...
  • <xs:anyAttribute ...
  • <xs:group ref= ...
  • <xs:attribute ...
  • <xs:choice ...
  • <xs:any ...
  • <xs:all ...

Of course this pretty much means to be safe, you need to stick with a <xs:sequence> of <xs:elements>. However, I was a little surprised to see that a <xs:simpleType> <xs:restriction> on a xs:string generated a very nice enum. Oh, News Flash! Kirill just responded to my email (hey, what's he doing on email this late?) and pointed me to some [internal] beta documentation that very clearly defines how all XSD constructs map to DataContracts. The doc looks awesome - I'll be sure to update this entry once it is live on the Web (if I don't, remind me). Okay, but you're not in the clear yet. You see, now we have to navigate the message wrapping issue.

The MessageContract

Because the DataContract is all about simplifying interop and the object model (OM), it hides wrapping element from the code, but (obviously) not from the WSDL. So, if you're going to import your handcrafted WSDLs, you need to know how to represent the wrapper "message" in WSDL in such a way that you don't have to deal with them in your OM. I think the easiest way to explain this part would be to start with a fragment of a WSDL and show what must change to get the right stuff in code. Consider this:

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  xmlns:srvc="http://MyOrg.HrSrvc.SrvcContracts/2006/10"
                  xmlns:data="http://MyOrg.HrSrvc.DataContracts/2006/10"
                  targetNamespace="http://MyOrg.HrSrvc.SrvcContracts/2006/10">
    <wsdl:types>
        <xs:schema elementFormDefault="qualified"
                   targetNamespace="http://MyOrg.HrSrvc.DataContracts/2006/10"
                   xmlns:tns="http://MyOrg.HrSrvc.DataContracts/2006/10">
            <xs:element name="Employee" type="tns:Employee"/>
            <xs:complexType name="Employee">
                <xs:sequence>
                    <xs:element name="ID" type="xs:int"/>
                    <xs:element name="Name" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
   
    <wsdl:message name="AddEmployeeSoapIn">
        <wsdl:part name="request" element="data:Employee" />
    </wsdl:message>
    <wsdl:message name="AddEmployeeSoapOut">
        <wsdl:part name="response" element="data:Employee" />
    </wsdl:message>
   
    <wsdl:portType name="IEmployeeManager">
        <wsdl:operation name="AddEmployee">
            <wsdl:input message="srvc:AddEmployeeSoapIn" />
            <wsdl:output message="srvc:AddEmployeeSoapOut" />
        </wsdl:operation>
    </wsdl:portType>
   
    <wsdl:binding name="YouGetTheIdea"/>
</wsdl:definitions>

Yes, I know I'm sending and receiving the same type. I'm trying to balance between brevity and reality (cut me some slack). Hopefully at this point I have some contract-first readers nodding their head thinking, "Ok, I'll buy that - seems reasonable enough." Now let's look at how we would have to write this to get the nice dev experience with WCF ('cause this won't create it).

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  xmlns:srvc="http://MyOrg.HrSrvc.SrvcContracts/2006/10"
                  xmlns:data="http://MyOrg.HrSrvc.DataContracts/2006/10"
                  targetNamespace="http://MyOrg.HrSrvc.SrvcContracts/2006/10">
    <wsdl:types>
        <xs:schema elementFormDefault="qualified"
                   targetNamespace="http://MyOrg.HrSrvc.DataContracts/2006/10"
                   xmlns:tns="http://MyOrg.HrSrvc.DataContracts/2006/10">
            <xs:element name="Employee" type="tns:Employee"/>
            <xs:complexType name="Employee">
                <xs:sequence>
                    <xs:element name="ID" type="xs:int" nillable="true"/>
                    <xs:element name="Name" type="xs:string" nillable="true"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
        <
xs:schema elementFormDefault="qualified"
                   targetNamespace="http://MyOrg.HrSrvc.SrvcContracts/2006/10"
                   xmlns:data="http://MyOrg.HrSrvc.DataContracts/2006/10"

                   xmlns:tns="http://MyOrg.HrSrvc.SrvcContracts/2006/10">
            <
xs:import namespace="http://MyOrg.HrSrvc.DataContracts/2006/10"/>

            <xs:element name="AddEmployee"/>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="request" type="data:Employee"/>
                    </xs:sequence>
                </xs:complexType>
            </
xs:element>
            <
xs:element name="AddEmployeeResponse"/>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="AddEmployeeResult" type="data:Employee"/>
                    </xs:sequence>
                </xs:complexType>
            </
xs:element>
        </xs:schema>
    </wsdl:types>
   
    <wsdl:message name="AddEmployeeSoapIn">
        <wsdl:part name="parameters" element="srvc:AddEmployee" />
    </wsdl:message>
    <wsdl:message name="AddEmployeeSoapOut">
        <wsdl:part name="parameters" element="srvc:AddEmployeeResponse" />
    </wsdl:message>
   
    <wsdl:portType name="IEmployeeManager">
        <wsdl:operation name="AddEmployee">
            <wsdl:input message="srvc:AddEmployeeSoapIn" />
            <wsdl:output message="srvc:AddEmployeeSoapOut" />
        </wsdl:operation>
    </wsdl:portType>
   
    <wsdl:binding n