首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF Nest服务

WCF Nest服务
EN

Stack Overflow用户
提问于 2015-06-27 12:05:14
回答 1查看 65关注 0票数 2

我正在设计一个SOA结构来整合大量的WCF WCF服务。根据我的经验,无论何时使用web服务,我们都被限制在非常扁平的结构上:

WebService - https://services.site.com/service.svc

  • Operation1
  • Operation2
  • 等。

因此,在上面的示例中,我们有一个服务,它有一个可用的操作集合。

然而,我们希望对可用的操作采用一种更加分层的结构。例如:

WebService - https://services.site.com/service.svc

想要这样做的原因是,在编写对服务的调用时,我们可以在客户端使用点标记,例如:

  • myService.Clients.CreateClient(params)
  • myService.Clients.Documents.GetDocumentsForClient(params)
  • myService.Products.CreateProduct(params)

有人能建议这是否可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-27 21:29:29

我认为蒂姆的评论是正确的。你想做的事是非常不正统的。

创建一个暴露不相关操作的层次结构的服务并不是服务的目的。同样,您不会创建一个执行10种不同事情的上帝对象,如果要在进程中使用二进制引用,则不应该尝试在进程之外执行。

如果点表示法在客户端对您很重要,那么您可以通过执行以下操作来获得您想要的内容。

编写服务端点

代码语言:javascript
复制
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);
    }
}

使用您的服务端点

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31088541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档