TeamWild
TeamWild

Reputation: 2550

How should I consume a WCF service using MVC3

I am writing a fairly simple MVC3 application that allows a user to retrieve and modify some configuration data held by a WCF service. The configuration data will not change very often but needs to be maintainable by the user. Once the user is happy with the configuration, they will launch some processing from the UI or by the scheduled execution of a VB script.

I'm fairly new to WCF and even newer to MVC3 but I'd like to make all the comms to and from the service RESTful. Is this a good thing to do?

I'd been planning to perform the service communications from the MVC controller. This would make a HTTP Get request to retrieve the current configuration and a HTTP Post to apply the modified configuration. I'd also use a Get request to launch the processing.

Could anyone provide an example (or point me in the direction) of how I should be doing this?

Upvotes: 0

Views: 8037

Answers (3)

TeamWild
TeamWild

Reputation: 2550

The simplest answer I've found was here:, using the channel factory.

I still don't know if it's the best way but it left my code looking clean enough. Below is a sample from my controller.

    public ActionResult Index()
    {
        SettingsModel config = null;

        // Set up a channel factory to use the webHTTPBinding
        using (WebChannelFactory<IChangeService> serviceChannel = 
            new WebChannelFactory<IChangeService>(new Uri(baseServiceUrl )))
        {
            IChangeService channel = serviceChannel.CreateChannel();
            config = channel.GetSysConfig();
        }

        ViewBag.Message = "Service Configuration";

        return View(config);
    }

Upvotes: 1

ADIMO
ADIMO

Reputation: 1117

If you are the owner of web service, you can directly reference implementation of service in your mvc project and use it without web reference. You can write some like this:

// example of ws
public class Service1 : IService1
 {
        public string GetData( int value )
        {
            return string.Format( "You entered: {0}", value );
        }

        public CompositeType GetDataUsingDataContract( CompositeType composite )
        {
            if( composite == null )
            {
                throw new ArgumentNullException( "composite" );
            }
            if( composite.BoolValue )
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
 }

// example of mvc action
public class HomeController : Controller
 {
        public ActionResult Index()
        {
            IService1 service = new Service1();

            service.GetDataUsingDataContract(....)

            ViewBag.Message = "Welcome to ASP.NET MVC!";

            return View();
        }
 }

Upvotes: 1

Rajesh
Rajesh

Reputation: 7886

Please follow the below links for some sample code to build a RESTful WCF Service and the how the client would access the service.

Link to create a RESTful service: here

Link to create a .NET client that consumes the RESTful service : here

Hope the information helps you out.

Upvotes: 1

Related Questions