Ich implementiere einen WCF-Dienst (Vertrag A), der schließlich Anrufe zu einem eigenständigen Dienst (Vertrag B) macht, der vom Client gehostet wird. Zur Entwurfszeit, wenn der Client die WSDL meines Diensts anfragt, um seinen Proxy zu erstellen, möchte ich die WSDL für Vertrag B einbeziehen, damit der Client seinen Dienst darauf aufbauen kann. Leider kann ich nicht herausfinden, wie Vertrag B in die WSDL injiziert wird, die von dem Dienst ausgegeben wird. Da der Vertrag eine Schnittstelle ist und nicht über das [DataContract] -Attribut verfügt, kann ich ihn nicht als bekannten Typ hinzufügen. Gibt es eine andere Möglichkeit, einen Vertrag in emittierte WSDL zu injizieren?Ich injiziere einen nicht verwandten Vertrag in die WSDL, die vom MEX-Provider der WCF erstellt wurde
Hier ist ein Beispiel:
[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)
}
}
}
Zunächst scheint es, dass dies ein Lehrbuchbeispiel eines Duplex-Vertrag. Für diese spezielle Anwendung benötige ich jedoch aus einer Reihe von Gründen ein bisschen mehr Trennung zwischen Client und Server, so dass ich hoffte, dem Client einfach eine Schnittstelle zu geben, um ihn (über die WSDL) zu hosten und dann seinen eigenen Dienst zu hosten Sag mir einfach die URL des Service.