A simple config-less IIS-hosted WCF service


I feel that it’s pretty handy to have a simple config-less IIS-hosted WCF service when I want to check whether WCF is correctly configured in IIS. So I post such a service here just for convenience.


Simple.svc:


<% @ServiceHost Language=“c#” Factory=“HelloWorld.SimpleServiceHostFactory” %>


 


namespace HelloWorld


{


    using System;


    using System.ServiceModel;


    using System.ServiceModel.Activation;


    using System.ServiceModel.Channels;


    using System.ServiceModel.Description;


 


    public class SimpleServiceHostFactory : ServiceHostFactory


    {


        public override ServiceHostBase CreateServiceHost(string service, Uri[] baseAddresses)


        {


            ServiceHost serviceHost = new ServiceHost(typeof(SimpleService), baseAddresses);


            serviceHost.AddServiceEndpoint(typeof(ISimpleContract), new BasicHttpBinding(), “”);


           


            // Enable HttpGet for the service


            ServiceMetadataBehavior metadata = new ServiceMetadataBehavior();


            metadata.HttpGetEnabled = true;


            serviceHost.Description.Behaviors.Add(metadata);


 


            return serviceHost;


        }


    }


 


    [ServiceContract(Namespace=“http://www.microsoft.com/test”)]


    public interface ISimpleContract


    {


        [OperationContract]


        string Hello(string greeting);


    }


 


    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,


        ConcurrencyMode=ConcurrencyMode.Multiple)]


    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]


    class SimpleService : ISimpleContract


    {


        private int state = 0;


 


        public SimpleService() { }


 


        public string Hello(string greeting)


        {


            state ++;


            return string.Format(“[{0}] You said: {1}”, state, greeting);


        }


    }


}


 


Here is the client code:


Client.cs:


using System;


using System.Collections.Generic;


using System.Text;


using System.ServiceModel;


using System.ServiceModel.Channels;


 


namespace HelloWorldClient


{


    [ServiceContract(Namespace=“http://www.microsoft.com/test”)]


    public interface ISimpleContract


    {


        [OperationContract]


        string Hello(string greeting);


    }


   


    class Program


    {


        static void Main(string[] args)


        {


            try


            {


                ChannelFactory<ISimpleContract> channelFactory =


                    new ChannelFactory<ISimpleContract>(new BasicHttpBinding());


                ISimpleContract proxy = channelFactory.CreateChannel(new


                    EndpointAddress(“http://localhost/Simple.svc”));


                Console.WriteLine(proxy.Hello(“Hello”));


            }


            catch (Exception ex)


            {


                Console.WriteLine(ex.ToString());


            }


        }


    }


}


 


To complete this little sample, let’s also provide a simple compiler script on 32-bit box:


%windir%\Microsoft.Net\Framework\v2.0.50727\csc.exe /debug+ /out:Client.exe /target:exe /r:System.ServiceModel.dll /r:System.Web.dll client.cs

Skip to main content