SharePoint: Getting “This collection already contains an address with scheme http” Error When Creating a Custom WCF Service

April 23, 2013

no comments


The problem is caused by the fact that IIS supports specifying multiple IIS bindings per site (which results in multiple base addresses per scheme, in our case HTTP), but a WCF service hosted under a site allows binding to only one base address per scheme.

Multiple addresses example (in our case two):



Create a custom service factory to intercept and remove the additional unwanted base addresses that IIS was providing.

A) Add the custom service factory to your Custom.svc file


<%@ServiceHost language=c# Debug="true" Service="MySolution.Services.CustomService, $SharePoint.Project.AssemblyFullName$"

Factory="MySolution.Core.CustomHostFactory", $SharePoint.Project.AssemblyFullName$ %>

* Don’t forget to add the assembly full name: $SharePoint.Project.AssemblyFullName$ or you’ll get “The CLR Type ‘typeName’ could not be loaded during service compilation” error.
B) Create a custom factory by inheriting from ServiceHostFactory
and overriding the CreateServiceHost method.
By using the current request host name you can check which base address to use, and if no host name found, use the first one.
public class CustomServiceHostFactory : ServiceHostFactory


        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)


            string hostName = HttpContext.Current.Request.Url.Host;

            foreach (Uri uri in baseAddresses)


                if (uri.Host == hostName)

                    return new ServiceHost(serviceType, uri);


            return new ServiceHost(serviceType, baseAddresses[0]);



    public class CustomHost : ServiceHost


        public CustomHost(Type serviceType, params Uri[] baseAddresses)

            : base(serviceType, baseAddresses)

        { }

        protected override void ApplyConfiguration()






Hope you’ll find this post helpful.


Add comment
facebook linkedin twitter email

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>