Last night while I was reading up on OPC-XML the interwebs took me on a merry trail of SOAP, XML-RPC and the like that ended with WCF Web Services. I found a very good tutorial on WCF Services at http://www.xvpj.net/2008/03/08/wcf-step-by-step-tutorial/ but this was for Visual Studio 2005. I only have express versions of Visual Studio 2010 so there were some things that needed to be done differently. In the interests of posterity here is how I wrote a very simple WCF web service and a WPF client that accesses it using only Visual Web Developer 2010 Express and Visual C# 2010 Express.
Configure the Development Environment
- Install Microsoft Visual C# 2010 Express
- Install Microsoft Visual Web Developer 2010 Express installed (you can download all Express editions on one iso image at http://www.microsoft.com/express/Downloads/#2010-All)
- Enable Windows features:
- IIS Metabase and IIS 6 configuration compatibility
- IIS Management Console
- ASP.NET
- In IIS Manager, under Application Pools right click DefaultAppPool, select Basic Settings then change .NET framework version to v4.0.x
- Install Windows SDK. This can be downloaded from http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&displaylang=en
Create the Web Service
- First we will create the web service. To do this we need to run Visual Web Developer 2010 Express with administrator privileges so hit the start button type in “web dev” or similar and when Web Developer is highlighted press ctrl+shift+enter. This will start it as an administrator and show the UAC prompt. Alternatively locate Web Developer in the start menu then right click and select run as administrator.
- Select File –> New web site and choose WCF Service and name it MultiplyService
- Add code App_Code / IService.cs
- Add code to App_Code / Service.cs
- Run the service by pressing ctrl F5 and click the Service.svc link in the page that opens. Nothing much to see here yet, you need a client to view this data. As indicated on the page you need to run the svcutil.exe utility to generate code that will be used by the client application
The svcutil.exe utility is installed with the Windows SDK and can be found at c:\Program Files\Microsoft SDKs\Windows\v6.0a\bin
To create the Service.cs file on the desktop try the following in a cmd prompt:
- That ends the WCF service. Leave all of this running, including the internet explorer window that Web Developer opened and open Visual C# Express to start on the client application.
Create the Client Application
- Start up Visual C# 2010 Express and select File –> New Project. Select WPF Application and name it MultiplyClient.
- Add a Service Reference
In the Service Reference dialog paste in the address from the internet explorer window that web developer opened. Select the service and select OK
- Copy the Service.cs file on the desktop that was generated by svcutil into the root folder of the project
- Add two entry textboxes, a multiply button and a result textbox to the MainWindow.xaml
- Add code to MainWindow.xaml.cs to call the service when the multiply button is clicked
- Modify the app.config file. Simply change the contract value from “ServiceReference1.IService” to “IService”
- Press ctrl+F5 to run the WPF application. Enter two values to multiply and hit the Multiply button, you should see the answer in the result textbox!
References
- The basic gist of WCF services:
http://www.xvpj.net/2008/03/08/wcf-step-by-step-tutorial/ - Adding IIS features:
http://www.howtogeek.com/howto/windows-vista/how-to-install-iis-on-windows-vista/ - Where to find the svcutil.exe utility:
http://www.dotnetspider.com/forum/239950-Where-find-svcutil-exe.aspx
Technorati Tags: WCF,Web Service,Tutorial,How to,Visual C# 2010 Express,Visual Web Developer 2010 Express,.NET
This comment has been removed by a blog administrator.
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDeleteThere have been so many views of this post! Please feel free to leave a comment letting me know if you found this useful.
ReplyDeleteHey Ben,
ReplyDeleteThanks for a very straight forward post. I am clueless with Web Services or WCF Services for that matter, but I was able to at least follow your example and get it working on my system.
I am building a WPF application that needs to run on systems located all over the world (working on their local networks), but will need to pull key data from our SQL server located in the head office. I was thinking I could call the SQL data into the WPF app using a WCF service. Is that how I would go about doing this? Can you shed some light on this?
Thanks.
Sri
You are good Ben. After carefully following directions and paying attention to detail, I got both the client app and web service working like a charm. I owe you one! Thank you for taking the time to share. Your efforts have not been in vain over here. :*-)
ReplyDeletewww.coachroebuck.com
Sharing a post on building a web service client with WCF, at http://justcompiled.blogspot.com/2010/10/building-web-service-client-with-wcf.html
ReplyDeleteAwesome Introduction to Creating WCF Web Services and accessing using a WCF client.
ReplyDeleteYour level of detail made this process unbelievalbe simple...
Much appreciated!!
Thanks, it was useful. The new terms really confused me when I started VS2010 for first time.
ReplyDeleteHi,
ReplyDeleteThanks for sharing this info. I will surely look forward at this.
Internet Marketing Firm
Hi. In the client code there is the line "ServiceClient svcClient = new ServiceClient()" How does this line reference the web service? It seems sort of generic and we aren't passing any parameters to it to specify what web service we are talking about.. How does it work?
ReplyDeletetnx alot mate..... this was my 1st WCF web service and it worked @ first shot..
ReplyDeletetnx alot.. cheers
I've a solution with 5 layers-Entity,Data Access,Exception,Business and UI. My Data Layer being WCF service and my UI is an asp .net web application. When i run the app, i get end point not found error. But I've put the service reference app config into UI... pls help
ReplyDeletehttp://karachi-webs-maker.blogspot.com/is a Web Design Company, produce the ideal reflection for your business by our creative and exclusive layouts.
ReplyDeleteweb design company
Hi Niranjan. Hope you got your problem resolved by now.
ReplyDeleteHad the same problem. In my case, I was using the WCF service with a Class Project (dll). Seems that you have to add the .config file to your main application for it to work.
Ben,
ReplyDeleteI hope you're still working with this stuff.
I can build and run the service, and access the service while it is running in Debug mode from the client.
Now, I'd like to "publish" (?) the service to my localhost (IIS 7 on Windows 7), and access the running service from the client. (Without having to run the service in debug mode from Visual Studio 2010 pro.)
Can you direct me to some instructions on how to make the service run under IIS?
Thanks,
Bob
found my answers here:
ReplyDeletehttp://msdn.microsoft.com/en-us/library/aa751792.aspx
Hey Ben,
ReplyDeleteI just want to say "thank you" for your time putting this together. I got my very first WCF service working properly using ASP.NET as client
http://karachi-webs-maker.blogspot.com/is a Web Design Company, produce the ideal reflection for your business
ReplyDeleteby our creative and exclusive layouts.
web design company
These work shows your hard work and its so easy and simply.
ReplyDeleteonline sweepstakes
church software
blackjack software
Somewhat useful. I keep having problems creating a service, especially the part where you say create the service from the command prompt. It won't work for me.
ReplyDeleteI get up to the part where I am to put the code behind the button but there is no way I can refer to my service using your example.
Service:
ReplyDeleteStep 6 doesn't mention that you need to copy the url from the browser window in step 5. That becomes the final parameter for the svcutil.exe command.
Also appears the MS changed the path to svcutil.exe. Might be dependent on OS. For me under Windows 7, it's now under ../v7.0/bin.
This means the final command looks like:
"C:\Program Files\Microsoft SDKs\Windows\V7.0\bin\svcutil.exe" [URL FROM STEP 5]
Client:
Step 3.
If you drag and drop the service.cs file into the solution window, it will add automatically. I used explorer to copy, so I also had to do do an Add Existing File, service.cs
i didn't learn before about WCF Web application! you have given me a great idea about this application, thanks for the very knowledgeable work.
ReplyDeleteweb design company in pakistan
Your blog is very informative and gracefully
ReplyDeleteyour guideline is very good.Thank you
Engineering college
Best engineering college in india
Private engineering college
pharmacy college
pharmacy college in india
top pharmacy college
Polytechnic college
Top polytechnic college
Top private polytechnic college
Top polytechnic colleges in India
Techanical colleges
Polytechnic college in india
Leading call center
Outbound call center india
Cheap Seo services india