Welcome to MSDN Blogs Sign in | Join | Help

Consuming external WCF Services from Dynamics AX 2009 X++ code (Dynamics AX "5.0")

I'm gonna talk about a new feature in Dynamics AX 2009 (Dynamics AX "5.0") which is the really powerful possibility we have now about calling/consuming external Web Services or even WCF Services from our X++ code.

So, in Dynamics AX 4.0, we could execute external Web Services thanks to the AIF outbound web service adapters, but we couldn't really consume those external Web Services from our X++ code... You can read a pretty good posting about that matter (AX 4.0 AIF and external Web Services) here:

http://blogs.msdn.com/dpokluda/archive/2006/10/03/Outbound-web-service-_2800_AIF_2900_.aspx

But the good news are that in AX "5.0", we are able to consume Web-Services and WCF Services from our X++ code almost like if I were consuming it from Visual Studio and a .NET program!!. :-)

So, guess the first thing we need to do that..., we need a Web-Service!, or even better, a WCF Service!!. I have developed a pretty simple WCF Service using Visual Studio 2008 (in C#).

It is a basic WCF Service about Stock Exchange, so when I provide a stock company Symbol (like MSFT), it would return the company name (like "Microsoft"). Of course, this Service's business logic is quite dumb, it should access to a database, but in this case I'm checking just about "MSFT" case. But, it is alright as I need any Web Service.

The WCF Service C# code is the following:

WCF Service Contract Interface:

[ServiceContract]
public interface IStockExchangeService
{
    [OperationContract]
    string GeCompanyNameByStockSymbol(string stockSymbol);
}

 

WCF Service Implementation class:

public class StockExchangeService : IStockExchangeService
{
    public string GeCompanyNameByStockSymbol(string stockSymbol)
    {
        string companyName;

        switch (stockSymbol)
        {
            case "MSFT":
                companyName = "Microsoft";
                break;
            default:
                companyName = "Company's Name";
                break;
        }

        return companyName;
    }
}

I have deployed this WCF Service in a regular IIS Web Server, and tested from a simple .NET WinForms App, just to check it was working ok. If you need help/info about developing and deploying a WCF Service on IIS, take a look at this article:

How to: Host a WCF Service in IIS: http://msdn2.microsoft.com/en-us/library/ms733766.aspx

OK!, so we have our external WCF Service up and running and we want to consume it from our X++ code within Dynamics AX "5.0", right?.

First thing we need to do is to add a WCF Service Reference to AX development environment, just like if we were doing a "Add Service Reference" from Visual Studio. To do so (at least with current BETA AX "5.0" version) we need to go (within AX client) to the menu "Tools-->Development Tools-->Application Integration Framework-->Add Service Reference", then we see a pretty simple window for that purpose:

image

We have to type in all the WCF service info, basically, the URI address (in my case it was http://dynamicsvpc.contosoent.com/ExternalWCFWebService/StockExchangeService.svc?wsdl) and a Service reference name/namespace I want, like "StockExchangeWcfService". Then, press over "OK" button, and, yes!, we'll have all the proxy artifacts we could need to consume that WCF Service!.

If you want to check about that WCF Service Reference to make sure it has been properly created, you can go to the menu "Basic-->Setup-->Application Integration Framework-->Service References" and you'll see a Window like the following where you can check it:

image

Yo can even configure the WCF Service when pressing the "Configure Service" button. And guess what is opened up?, yes!, exactly the same WCF Configuration Tool we can use from Visual Studio 2008! :-), from there we could configure WCF client end-points, changing the binding type (by default, in AX "5.0" CTP3, it is using wsHttpBinding binding, so it is secured by default based on Windows security and we have Service authentication and messages Encryption "for granted"), and so on...:

image

We could use another Binding like "basicHttpBinding" like if it were a basic Web Service (WS-I Basic Profile), etc., but no need to change it now, ok?

If you'd want to change any of those parameters, beware that you should change it first on the WCF Service side, because it has to match with it.

Great!, so it is ready for us, now let's go to the X++ editor and write some code to consume it!.

First of all, we create a X++ class to encapsulate my Service proxy calls, I always like to do it in this way, even in .NET. This kind of classes are called "Service-Agents", so if in the future something about the Service has changed, you should change it just within your "Service Agent" class. That is the purpose of ENCAPSULATION.

This is my X++ "Service Agent" class within AOT:

image

And my X++ code implementing the GetCompanyNameByStockSymbol():

public static str GeCompanyNameByStockSymbol(str stockSymbol)
{
    str companyName;
    StockExchangeWcfService.StockExchangeService proxy;
    ;

    new InteropPermission(InteropKind::ClrInterop).assert();

    // Call the WCF method.
    proxy = new StockExchangeWcfService.StockExchangeService();
    companyName = proxy.GeCompanyNameByStockSymbol(stockSymbol);

    CodeAccessPermission::revertAssert();

    return companyName;

}

I have highlighted in bold letters the most important code lines, I mean, the WCF Service proxy object variable, when instantiating the WCF Service class and, of course, when calling the "GeCompanyNameByStockSymbol()" Service method.

That's it, really simple!, those are the most important steps we gotta make (beware we have not finished yet... keep on reading... ;-)).

So, just to test our "Service Agent" class, we create a new Job, like the following:

static void CallExternalWcfService(Args _args)
{
    str stockSymbol;
    str companyName;
    ;

    stockSymbol = "MSFT";
    // Call the Service-Agent method.
    companyName = StockExchangeServiceAgent::GeCompanyNameByStockSymbol(stockSymbol);

    print(companyName);
    pause;

}

And if we just run this Job, guess what... We'll get a cute error!!, something like:

"Stack trace: Unhandled exception 9 was encountered."

image

Yep, not very descriptive, right?. :-), ok, but then, we may get these other errors:

"Clr object is not initialized"
"Object 'CLRObject' could not be created"

OK, this is because the proxy artifacts (Service Reference) generated by AX "5.0", is using "CLR-Interop" underneath, and therefore, our X++ execution should be made within the AOS Server context. Because of we were calling that class from a Job, by default, it was trying to execute that class within the AX client context instead of the AOS Server context...

So, no problem, let's fix it!, what we gotta do is to specify that our "Service Agent" class should always be executed within the AOS Server. :-). To do so, we just go to the class properties and change the "RunOn" property to "Server", instead of "Called from" (default value) or "Client", which are not right in this case.

image

And, yeah!, it works now!! :-)

image

"Microsoft" is the value returned by my WCF Service when I provide "MSFT" as the stock company Symbol.

Of course, you should try now to consume more complicated WCF Services, like getting data subsets (you'll have to check data conversions, etc.), and so on..

CRM 4.0 Plugin Registration Tool V2.0

If you want to develop CRM 4.0 Plugings, there's a tool called "Plugin Registration Tool 2.0" which can help you a lot when you want to register it into CRM Server. So, PluginRegistration tool is an enhanced version of the tool that is published within Microsoft Dynamics CRM 4.0 SDK.

You can download "PluginRegistration tool " from:

http://code.msdn.microsoft.com/crmplugin

Also, there are sample plugings you can download from:

http://code.msdn.microsoft.com/crmpluginsamples

So!, when you download it, what you get is the full source-code Visual Studio project for this tool (so you could investigate how it is done, consuming CRM Web-services, etc.). But if you just want to use it, open the project with Visual Studio (I migrated it to Visual Studio 2008 :-) ), compile it, and run it!.

Microsoft Dynamics Mobile version 1.1 has been released!!

clip_image001

Microsoft Dynamics™ Mobile, version 1.1 has been released and is available in PartnerSource.

With the new release of Microsoft Dynamics™ Mobile, Microsoft Dynamics we now have the opportunity to use the Mobile Development Tools to build end-to-end solutions for Microsoft Dynamics, create vertical applications quickly. It is based on several high level development concepts like Tasklets, Orchestrations and Wizards, therefore it reduces the application development time for mobile implementations (compared with a regular .NET Compact Framework mobile development)

Dynamics Mobile 1.1 supports Microsoft Dynamic NAV 4.0 SP3 and the newly released Microsoft Dynamics NAV 5.0 SP1.

It also supports Microsoft Dynamics AX 4.0 SP2.

The release also contains 'Mobile Sales', which is the first mobile application for NAV and AX from Microsoft Dynamics Mobile. Mobile Sales is RoleTailored and task-oriented and an ideal solution for field sales representatives and other mobile employees who need to work in remote locations. The field sales representatives can plan visits, review relevant sales information, and create orders.

Finally, Mobile Sales tasklets are incorporated into the Mobile Framework which will enable our partners to utilize the Framework to its full extension. 

Microsoft Dynamics Mobile is localized for Microsoft Dynamics NAV in 42 countries and AX in 30 countries.

You can read much more about our products on Partnersource:

https://mbs.microsoft.com/partnersource/products/mobile

We have also created a Team Blog on MSDN http://blogs.msdn.com/dynamicsmobile, where we have started blogging about releases and other aspects of the development process.

You can download the product from Partnersource (if you are a Dynamics partner):

https://mbs.microsoft.com/partnersource/downloads/releases/DynamicsMobileVersion11

Installing Dynamics CRM 4.0 on a Windows Server 2008 machine

So, I was facing several issues when trying to install CRM 4.0 on a Windows Server 2008 machine. But I have found this article where you can see several typical error messages, and how you can solve it:

http://support.microsoft.com/kb/950100/en-us

For errors about SQL Reporting Services, you can look at this article :
How to install and how to configure SQL Server 2005 Reporting Services on a computer that is running Windows Server 2008
http://support.microsoft.com/kb/938245

One common error when installing SQL Server Reporting Services on a Windows Server 2008 which is also a Domain Controller, is regarding security and system accounts. Check that IIS App.Pool account and SSRS service web account have rights enough to access to the "C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer" directory..

Also, at the beginning of CRM 4.0 installation, if you get and error regarding "Indexing Service", something like:

"Service cisvc was not found on computer 'XXX'. The specified service does not exist as an installed service.".

Then, this is because CRM 4.0 requires the old "Indexing Service" (which was part of Windows Server 2003), and it is not finding the cisvc Service. So, you need to install it in Windows Server 2008, like you can see down below (within File Server Role):

image

I don't think CRM 4.0 works with the new "Windows Search Service" (which is a new feature in Windows Server 2008)..

Posted by cesardl | 0 Comments

Presenting at Microsoft TechReady6!! (Seattle - Feb. 15th)

Techready6_Logo

Last week Steffen and I were presenting a session called "The real cool fit!: Dynamics AX 2009 and the new Microsoft development technologies". Here is the content we were presenting in Seattle!!:

MSDY309  The real cool fit! - Microsoft Dynamics AX 5.0 and the new Microsoft development technologies

Primary Track: Business Solutions

Session Type: Breakout

Speaker(s): Cesar De la Torre Llorente, Steffen Niehues

Abstract: How Microsoft Dynamics AX fits into the Mainstream Microsoft Stack and why you should care!.

We will present how to access and consume Microsoft Dynamics AX 5.0 business logic using several cool demo scenarios and latest technologies like:

- Cool UI - Silverlight and Windows Presentation Foundation (WPF). Accessing Microsoft Dynamics AX via .Net Business Connector and Web Services the Application Integration Framework (AIF)

- OBA apps - VSTO (.NET Visual Studio Tools for Office 2007), InfoPath/InfoPath Forms Server and MOSS-2007 portals accessing AX

- Workflow - Microsoft Dynamics AX workflow which is based on Windows Workflows Foundation (WF)

- SOA: Microsoft Dynamics AX Application Integration Framework (AIF) and Windows Communication Foundation (WCF) Services consumed from remote apps, like Windows Mobile Apps (.NET Compact Framework)

Objectives: 1. Analyze and integrate the new AX 5.0 development capabilities and extensibility towards the Mainstream Microsoft development Stack. 2. Designing, building and coding cool and flashy demos based on the new Microsoft technologies consuming AX 5.0 as a backend. 3. Present "Dynamics AX 5.0 as a great development platform and backend".

It's been great, a lot of attendees, great feed-back and great evals!! (4.41 over 5.0). Neat!!

Posted by cesardl | 1 Comments

Design_Time_Addresses URL in WCF (.NET 3.5)

.NET 3.5 creates an ACL (Access Control List) for the namespace "http://+:8731/Design_Time_Addresses" during the installation of Visual Studio so users without administrator privilege are able to develop WCF services. The ACL is set to (UI), which includes all interactive users logged on to the machine. Administrators can add or remove users from this ACL, or open additional ports.

This ACL enables WCF or WF templates to send and receive data in their default configuration. It also enables users to use the WCF Service Auto Host (wcfSvcHost.exe) without granting them administrator privileges.

You can modify access using the netsh.exe tool in Windows Vista under the elevated administrator account. The following is an example of using netsh.exe.

netsh http add urlacl url=http://+:9002/MyService user=<domain>\<user>

TIP: If you are developing as Administrator and also you have disabled Windows Vista UAC (User Account Control), then you shouldn't have to deal with this matter. You could choose any URI you want. But, you'd better do a good testing with no Administrators users before deploying your WCF Service, or you'll be facing this security control when you don't have time to deal with it (deployment phase, production environment, etc.). ;-)

Posted by cesardl | 1 Comments
Filed under: , ,

Error when consuming AX 5.0 AIF Services from an external .NET client application: How to fix it!!

If you create an AIF Service from scratch (like creating an AX query and generating the WCF Service with the AIF wizard) and then you try to consume it from an external .NET client app, you'll get an error (at least with AX 5.0 CTP3 drop2). On the other hand, you are able to consume, with no problems, all the out-of-the-box AX 5.0 AIF services (like Customers, and so on).

So, the .NET error you get when consuming your own custom AIF Service is something like the following:

"Request Failed. See the Exception Log for details"

System.ServiceModel.FaultException was unhandled
  Message="Request Failed. See the Exception Log for details."
  Source="mscorlib"
  StackTrace:
    Server stack trace:
       at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]:
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at WinAppClient.ExpenseRepService.BasicExpRepService.find(BasicExpRepServiceFindRequest request)
       at WinAppClient.ExpenseRepService.BasicExpRepServiceClient.WinAppClient.ExpenseRepService.BasicExpRepService.find(BasicExpRepServiceFindRequest request) in C:\Demos AX 5.0 and new MS techs\02 Demo Consuming AIF-WCF Services\Clients\WinAppClient\Service References\ExpenseRepService\Reference.cs:line 930
       at WinAppClient.ExpenseRepService.BasicExpRepServiceClient.find(QueryCriteria QueryCriteria) in C:\Demos AX 5.0 and new MS techs\02 Demo Consuming AIF-WCF Services\Clients\WinAppClient\Service References\ExpenseRepService\Reference.cs:line 936
       at WinAppClient.ExpenseReportForm.btnSubmitExpRep_Click(Object sender, EventArgs e) in C:\Demos AX 5.0 and new MS techs\02 Demo Consuming AIF-WCF Services\Clients\WinAppClient\ExpenseReportForm.cs:line 51
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at WinAppClient.Program.Main() in C:\Demos AX 5.0 and new MS techs\02 Demo Consuming AIF-WCF Services\Clients\WinAppClient\Program.cs:line 19
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:

This is not a very descriptive error...

Anyway, it is very simple to fix it!!. What you gotta do is:

- Go to your AIF Service configuration properties (AOT), and add a SecurityKey. Then, you'll be able to consume your custom AIF-WCF Service with no errors/problems!!

How to find out which Form class and tables are used by a specific Dynamics AX form/functional process.

This is a basic tip for developers who are starting with Dynamics AX. So, to find the form class and tables that are used by a functional process (like when you are executing and seeing an AX form), what we need to do first is to find out the form class name. To find the AOT form class name, open that form that's used in a process and Right-click on the form (over any record, for example) and select Setup. From there we can see the Form class definition and drill down to see all the tables it is using and so on.

You can also use SQL Profiler to discover what database objects are being accessed during a process.

Event - Extending and developing with Dynamics AX '5.0' - Microsoft METRO Discovery Event (Madrid - January 30th 2008)

‘Dynamics AX "5.0" - Metro Discover Event’ - Madrid – January 30th 2008

We’re going to deliver a Dynamics AX event specially made for ISVs (companies which creates and sell their own software).

So, we’ll be speaking about new AX 5.0 development features and of course, we’ll be speaking about METRO which is our initiative/program for ‘Early Adopters’ ISVs, in this case, specifically for Dynamics AX 5.0 early adopters.

METRO is therefore oriented just to ISVs companies which want to develop their products over or integrated with latest versions of Dynamics (currently in beta state). So METRO offers free training on those beta versions of Dynamics, access to new Dynamics bits, virtual machines, learning material and even Microsoft PSS official support!!. :-)

So, if you are an ISV company in Spain, and want to attend to this event and hear a bit about the new versions of Dynamics AX, and also to know what is METRO, send me an e-mail/message/blog-comment so I can send to you an invitation to this event.

We delivered a session in MTC-Summit 2008 (Berlin) about Dynamics AX and new Microsoft development technologies

MCTSummit logo_ms_dynamics_250x55

So yesterday, Steffen Niehues and I (we both are in Western-Europe DPE virtual Team) delivered a session about "Dynamics AX and the new Microsoft development technologies" in the MTC-Summit 2008 event, in Berlin. So, all the attendees were Microsoft Certified Trainers.

Before our speech, Wilfried Heermann and Gina Haines both spoke about the opportunity MCTs have about training Dynamics, how can they be enrolled in this and also explaining our work in Microsoft DPE (Development & Platform Evangelism).

It was a very nice event, and we delivered our session with success!!. We're getting such a good feed-back about our session. :-)

Here is the event's URL:

http://www.microsoft.com/germany/learning/mct/mctsummit2008.mspx

Accesing the Network from a 'Smart Device Emulator' which is within a Virtual PC 2007 virtual machine

If you are developing .NET Compact Framework apps (Pocket PC or Windows Mobile), using, for instance, Visual Studio 2008, but you are using a Virtual PC 2007 virtual machine (where you have all the development environment installed), things get a little bit tricky when you want to access the network from the "Smart Device Emulator"...

It turns out that when you want to enable the 'Smart Device Emulator network card' (from Pocket PC emulator window --> Configure --> Network --> Enable NE2000 network adapter), it needs to have the "Virtual Machine Network Services Driver". And that driver comes just with the Virtual PC 2007 (there's no a standalone setup anymore for that..).

So the funny thing is that you need to install "Virtual PC 2007" within your virtual Windows guest machine (for instance I'm using Windows Server installed as a virtual machine). Then, when you enable the 'Smart Device Emulator network card' (from Pocket PC emulator window --> Configure --> Network --> Enable NE2000 network adapter), then it will be able to find those drivers. Otherwise, it just says that it cannot find the drivers.

So, in this specific scenario, we need to just install "Virtual PC 2007" into a 'Windows virtual machine' which is already running within another "Virtual PC 2007" and hosting Windows (Windows vista, for instance). :-)

The hole picture could be the following:

Windows Vista --> running "Virtual PC 2007" --> Windows Server (guest OS)--> installed "Virtual PC 2007" (no need to run it) --> Smart Device Emulator --> Enable Network Card. :-)

Posted by cesardl | 1 Comments

How to enable debugging on Server - Dynamics AX

In most of the cases, our X++ classes have to be executing within the server (AOS). In a default deployment we're not able to debug server code.

To have this Dynamics AX feature, we must enable it in ‘Microsoft Dynamics AX Server Configuration Utility’ tool (within 'Administrative Tools' menu).

You may need to use the Manage button to Create a new Configuration. Then, on the first tab, Application Object Server, make sure that the check box option "Enable breakpoints to debug X++ code running on this server" is checked.

There is a direct registry key to do it, too. (but this way may be not supported):

REGEDIT4

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dynamics Server\4.0\01\ Original (installed configuration)]

"xppdebug"="1"

Microsoft Dynamics CRM 4.0 (aka. Titan) has just been released!!

Microsoft has just released our Microsoft Dynamics CRM 4.0, which can be installed On-Premise, On-Hosting and as S+S (CRM-Live is is offered only in U.S. and Canada).

The new version of Microsoft Dynamics CRM, formerly code-named “Titan,” has been completed and released to manufacturing, Microsoft Corp. announced today. The new version is offered under two product names: Microsoft Dynamics CRM 4.0 for on-premise and partner-hosted deployments and Microsoft Dynamics CRM Live for Microsoft-hosted deployment. Designed with a single unified-code base for both on-premise and on-demand deployments.

You can see more information about this, here:

http://www.microsoft.com/Presspass/press/2007/dec07/12-17CRM40PR.mspx

Posted by cesardl | 1 Comments

ISV Innovation Days Event in Spain!! (December 18th &amp; 20th 2007)

banner-InnDay

Next week we're going to deliver a special event for ISVs, which is called  "ISV Innovation Days" (December-2007).

We'll deliver it in Madrid (Dec.18th 2007) and in Barcelona (Dec.20th 2007)

I'll deliver the following two sessions:

1.- "Service Oriented Architecture (SOA) in .NET 3.5": Windows Communication Foundation, Workflow Foundation and Workflow-Services (SILVER).

2.- "Microsoft Dynamics CRM 4.0 (Titan) as a Development platform": Customization, CRM workflow, Plugins, CRM Web-Services, Reports, etc.

You can see the event's information and registration here (beware that it's in Spanish):

Info: http://www.microsoft.com/spain/partner/isv/innovationdays/default.mspx

Registration - Madrid's event: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032360808&Culture=es-ES

Registration - Barcelona's event: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032360810&Culture=es-ES

Posted by cesardl | 1 Comments

Visual Studio 2008 and .NET Framework 3.5 Training Kit

There is a very nice training kit (which I'm using quite a lot) about the new Visual Studio 2008 and .NET Framework 3.5. It covers most of all the new .NET 3.5 features, like WPF, WCF, Workflow, Workflow-Services (SILVER), LINQ, C# 3.0, ASP.NET AJAX, VSTO, CardSpace, SilverLight, etc.

I beleive it's been created/delivered by Microsoft DPE. :-)

 You can download it from here:

http://www.microsoft.com/downloads/details.aspx?FamilyID=8BDAA836-0BBA-4393-94DB-6C3C4A0C98A1&displaylang=en

 

Posted by cesardl | 1 Comments
More Posts Next page »
 
Page view tracker