tags:

views:

19

answers:

2

Hi all, i am new to WCF, i try to create a duplex service and i get an exception with this messge "HTTP could not register URL http://+:80/Temporary_Listen_Addresses/42be316a-0c86-4678-a61a-fc6a5fd10599/ because TCP port 80 is being used by another application." I will post the whole code in here and i hope you have time to take a look. I am using Windows XP.

Service

namespace WcfService
{
    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(RandomService));
            host.Open();
            Console.WriteLine("Service is running, press <ENTER> to stop it");
            Console.ReadLine();
            host.Close();
        }
    }
    public class RandomService : IRandomService
    {
        public void GenerateRandomNumber(int limit)
        {
            Random r = new Random();
            int genInteger = r.Next(limit);
            Thread.Sleep(3000);
            IRandomCallback callback = OperationContext.Current.GetCallbackChannel<IRandomCallback>();
            callback.ShowRandomNumber(genInteger);
        }
    }
    public interface IRandomCallback
    {
        [OperationContract(IsOneWay = true)]
        void ShowRandomNumber(int ranomNumber);
    }
    [ServiceContract(CallbackContract = typeof(IRandomCallback))]
    public interface IRandomService
    {
        [OperationContract(IsOneWay = true)]
        void GenerateRandomNumber(int limit);
    }
}

Config file

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WcfService.RandomService" behaviorConfiguration="randomConfig">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:6789/random/"/&gt;
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsDualHttpBinding" contract="WcfService.IRandomService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="randomConfig">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Client

class Program
    {
        static void Main(string[] args)
        {
            InstanceContext context = new InstanceContext(new RandomHandler());
            RandomServiceClient proxy = new RandomServiceClient(context);
            Console.WriteLine("Let's generate a random number");
            try
            {
                proxy.GenerateRandomNumber(100);
            }
            catch (AddressAlreadyInUseException exception)
            {
                Console.WriteLine(exception.Message);
            }
            Console.WriteLine("Press <ENTER> to exit");
            Console.ReadLine();
        }
    }
    public class RandomHandler : IRandomServiceCallback
    {
        public void ShowRandomNumber(int ranomNumber)
        {
            Console.WriteLine("Generated number:{0}", ranomNumber);
            Console.ReadLine();
        }
    }

Config file -> generated using svcutil.exe

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsDualHttpBinding>
                <binding name="WSDualHttpBinding_IRandomService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" />
                    <security mode="Message">
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" />
                    </security>
                </binding>
            </wsDualHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:6789/random/" binding="wsDualHttpBinding"
                bindingConfiguration="WSDualHttpBinding_IRandomService" contract="IRandomService"
                name="WSDualHttpBinding_IRandomService">
                <identity>
                    <userPrincipalName value="BOGUS\Bogdan" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>
A: 

It's probably being caused because something else is already listening on port 80. Quite often it's IIS running on the same machine. It can also be caused by the WCF Test Client being started if you run the program from Visual Studio and have also created your own service host.

Take a look at this link for some hints. The comments at the bottom of this article also have some suggestions. And one more link here.

TLiebe
I host both service and client in console applications i have no wcf service project. Is there any way to get this working cos' i can't find any solutions?
boo
A: 

Instead of hosting the service in a console application i created a wcf service and in the client application config i added a clientBaseAddress for the binding

boo