Я реализую службу WCF (контракт A), которая в конечном итоге совершит вызовы к автономной службе (Контракт B), размещенной клиентом. Во время разработки, когда клиент запрашивает WSDL моей службы для создания своего прокси-сервера, я хотел бы включить WSDL для контракта B, чтобы клиент мог создать свою службу вокруг этого. К сожалению, я не могу понять, как вводить контракт B в WSDL, испускаемый службой. Поскольку контракт является интерфейсом и не имеет атрибута [DataContract], я не могу добавить его как известный тип. Есть ли другой способ вставить контракт в выпущенный WSDL?Внедрение несвязанного контракта в WSDL, созданный провайдером MEX WCF
Вот пример:
[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)
}
}
}
На первый взгляд кажется, что это хрестоматийный пример дуплексного контракта. Однако для этого конкретного приложения по разным причинам мне нужно немного больше разделения между клиентом и сервером, поэтому я надеялся просто дать клиенту интерфейс для реализации (через WSDL), позволить ему размещать свою собственную услугу, затем просто скажите мне URL-адрес службы.