WCF发现和数据服务V3
我想为我的Data Services v3公开发现端点(TCP和UDP),并使服务能够从客户端发现,并在另一个应用程序中发现它们。发现的要点是在客户端获取服务端点地址 我曾尝试调整Microsoft为WCF发现提供的示例,但到目前为止,我未能实现我的目标。 我已在服务器端创建了自定义数据服务主机工厂: 在客户端,我尝试了以下代码:WCF发现和数据服务V3,wcf,wcf-data-services,service-discovery,wcf-data-services-client,wcf-discovery,Wcf,Wcf Data Services,Service Discovery,Wcf Data Services Client,Wcf Discovery,我想为我的Data Services v3公开发现端点(TCP和UDP),并使服务能够从客户端发现,并在另一个应用程序中发现它们。发现的要点是在客户端获取服务端点地址 我曾尝试调整Microsoft为WCF发现提供的示例,但到目前为止,我未能实现我的目标。 我已在服务器端创建了自定义数据服务主机工厂: 在客户端,我尝试了以下代码: DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
// Find service endpoints
// ServiceReference.DataModel is the generated class for the Data Service client proxy
FindCriteria findCriteria = new FindCriteria(typeof(ServiceReference.DataModel));
findCriteria.Duration = TimeSpan.FromSeconds(30);
FindResponse findResponse = discoveryClient.Find(findCriteria);
// Check to see if endpoints were found & print the XML metadata in them.
if (findResponse.Endpoints.Count > 0)
{
foreach (XElement xElement in findResponse.Endpoints[0].Extensions)
{
Console.WriteLine("Printing Metadata from ServiceEndpoint:");
Console.WriteLine("Endpoint Information: " + xElement.Element("Information").Value);
Console.WriteLine("Endpoint Started at Time: " + xElement.Element("Time").Value);
Console.WriteLine();
}
}
不幸的是,这不起作用。我得到了无效操作异常:
试图获取DataModel的协定类型,但该类型无效
不是ServiceContract,也不继承ServiceContract
如果我正朝着正确的方向前进,我需要一种方式来表示发现服务契约的类型。太糟糕了,我不确定它是否会像普通的WCF发现一样工作
请分享您的想法或更好的解决方案。我认为异常信息已经足够清楚了。 对于服务发现,您尝试使用数据模型的类型,而必须使用WCF服务实现的类型—这是不同的 基本上,DataServicesV3服务适配器使用您的数据模型,并使用自己的服务契约将其作为WCF服务公开。 看看DataServiceV3类型声明,看看它正在实现一些接口,我只是不记得名称,在这个接口声明中,您将找到[ServiceContract]和[ServiceOperation]属性。这是您针对DataServiceV3所有祖先的服务合同。他们使用相同的合同。这里还有另一个我还没有设法解决的问题——如果数据服务共享相同的契约,如何使WS-Discovery与数据服务一起工作。你最好这样挖
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
// Find service endpoints
// ServiceReference.DataModel is the generated class for the Data Service client proxy
FindCriteria findCriteria = new FindCriteria(typeof(ServiceReference.DataModel));
findCriteria.Duration = TimeSpan.FromSeconds(30);
FindResponse findResponse = discoveryClient.Find(findCriteria);
// Check to see if endpoints were found & print the XML metadata in them.
if (findResponse.Endpoints.Count > 0)
{
foreach (XElement xElement in findResponse.Endpoints[0].Extensions)
{
Console.WriteLine("Printing Metadata from ServiceEndpoint:");
Console.WriteLine("Endpoint Information: " + xElement.Element("Information").Value);
Console.WriteLine("Endpoint Started at Time: " + xElement.Element("Time").Value);
Console.WriteLine();
}
}