我正在实现一个 WCF 服务(合同 A),该服务最终将调用客户端托管的独立服务(合同 B)。在设计时,当客户端查询我的服务的 WSDL 以构建其代理时,我想包含 Contract B 的 WSDL,以便客户端可以围绕它构建它的服务。不幸的是,我不知道如何将 Contract B 注入到服务发出的 WSDL 中。由于合同是一个接口并且没有 [DataContract] 属性,因此我无法将其添加为已知类型。有没有其他方法可以将合约注入到发出的 WSDL 中?
这是一个例子:
[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),让它托管自己的服务,然后告诉我服务的网址。