I have WCF service
how run on 1 machine and simple comsole application client
who run on another machine.
the server do something very simple: one method that return the value of 2 number that the client sent:
[ServiceContract]
public interface IMySampleWCFService
{
[OperationContract]
int Add(int num1, int num2);
[OperationContract]
void CreateDirectory(string directory);
[OperationContract]
string GetVendorToRun(string path);
}
public class MySampleWCFService : IMySampleWCFService
{
public int Add(int num1, int num2)
{
return num1 + num2;
}
}
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="WCFServiceHostingInWinService.MySampleWCFService">
<endpoint
name="ServiceHttpEndPoint"
address=""
binding="basicHttpBinding"
contract="WCFServiceHostingInWinService.IMySampleWCFService">
</endpoint>
<endpoint
name="ServiceMexEndPoint"
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://192.0.16.250:8733/MySampleWCFService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
What i want to do and find it hard to implement because i am a new developer is add Discovery to my WCF service
, suppose i have several services that installed on several machines, what the client application is open i want to now which services is alive\running and all this data that i can received from Discovery.
I try to read several articles but as i mention didn't understand how to do it and I would love some help.
I think the most easy way to do this is to try to connect your client to addresses that you calculate at the runtime. For example:
In my case I create a list with addresses but in your case you may build addresses with some predefined rules. For example you know that services use http binding with some name and port. Also you know that your cluster is in 192.0.16.xxx LAN so you may use formula:
address = "http://" + NextLanAddress() + ":" + port + "/" + serviceName + "/";