Je suis en train d'implémenter un service WCF (contrat A) qui finira par effectuer des appels à un service autonome (contrat B) hébergé par le client. Au moment de la conception, lorsque le client interroge le WSDL de mon service pour créer son proxy, je souhaite inclure le WSDL pour le contrat B afin que le client puisse créer son service. Malheureusement, je n'arrive pas à comprendre comment injecter le contrat B dans le WSDL émis par le service. Comme le contrat est une interface et qu'il ne possède pas l'attribut [DataContract], je ne peux pas l'ajouter en tant que type connu. Existe-t-il un autre moyen d'injecter un contrat dans WSDL émis?Injection d'un contrat non lié dans le WSDL créé par le fournisseur MEX de WCF
Voici un exemple:
[ServiceContract]
public interface IServerService
{
[OperationContract]
void GiveTheServerMyServiceUri(string uri);
[OperationContract]
void TellAllClientsSomething(string message);
}
// THIS IS THE INTERFACE I WANT TO INCLUDE IN THE WSDL
[ServiceContract]
public interface IClientService
{
[OperationContract]
void ReceiveMessageFromServer(string message);
}
public class ServerService : IServerService
{
private List<string> knownClients;
public void GiveTheServerMyServiceUri(string uri)
{
knownClients.Add(uri);
}
public void TellAllClientsSomething(string message)
{
foreach (string clientUri in knownClients)
{
// 1. Create instance of ClientServiceProxy using client's uri
// 2. Call proxy.ReceiveMessageFromServer(message)
}
}
}
Au début, il semble que ce soit un exemple de manuel d'un contrat duplex. Cependant, pour cette application particulière, pour une variété de raisons, j'ai besoin d'un peu plus de séparation entre client et serveur donc j'espérais juste donner au client une interface à implémenter (via le WSDL), laisser héberger son propre service, puis Dites-moi simplement l'URL du service.