我正在设计一个SOA结构来整合大量的WCF WCF服务。根据我的经验,无论何时使用web服务,我们都被限制在非常扁平的结构上:
WebService - https://services.site.com/service.svc
因此,在上面的示例中,我们有一个服务,它有一个可用的操作集合。
然而,我们希望对可用的操作采用一种更加分层的结构。例如:
WebService - https://services.site.com/service.svc

想要这样做的原因是,在编写对服务的调用时,我们可以在客户端使用点标记,例如:
有人能建议这是否可能吗?
发布于 2015-06-27 21:29:29
我认为蒂姆的评论是正确的。你想做的事是非常不正统的。
创建一个暴露不相关操作的层次结构的服务并不是服务的目的。同样,您不会创建一个执行10种不同事情的上帝对象,如果要在进程中使用二进制引用,则不应该尝试在进程之外执行。
如果点表示法在客户端对您很重要,那么您可以通过执行以下操作来获得您想要的内容。
编写服务端点
namespace Clients
{
[ServiceContract]
interface IService
{
[OperationContract]
void CreateClient(params p);
}
}
namespace Clients.Documents
{
[ServiceContract]
interface IService
{
[OperationContract]
List<Document> GetDocumentsForClient(Guid clientKey);
}
}
namespace Products
{
[ServiceContract]
interface IService
{
[OperationContract]
void CreateProduct(params p);
}
}使用您的服务端点
var service = new ChannelFactory<Clients.IService>().CreateChannel();
var service = new ChannelFactory<Clients.Documents.IService>().CreateChannel();
var service = new ChannelFactory<Products.IService>().CreateChannel();如您所见,您可以使用服务合同的完全限定名来使用相关的服务操作。这为您提供了所需的点分隔格式。
使用这种方法,您必须让客户端引用包含服务和操作契约的程序集,而不是通过服务引用,后者将删除服务名称空间,并将其替换为本地生成的名称空间。要启用此功能,您应该将服务和数据契约构建到服务实现的单独程序集中,以便能够共享。
...how (到)将它们的调用路由到我的服务--因为他们不会使用visual的‘’功能来连接URL/端点
下面是Tim的注释,作为另一种选择,您可以将您的服务的config元素的名称从您的配置文件中注入到ChannelFactory构造函数中,正如所描述的here。
https://stackoverflow.com/questions/31088541
复制相似问题