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/"/>
</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>