【问题标题】:How Do I config one endpoint for multiple service in WCF?如何在 WCF 中为多个服务配置一个端点?
【发布时间】:2011-08-14 03:46:57
【问题描述】:

是否有可能以及如何在我们的 WCF 服务应用程序中配置多个服务的一个端点?

谢谢

【问题讨论】:

  • 一个服务可以有 1:n 个端点 - 但每个端点只属于一个服务。您不能跨多个服务“共享”端点。

标签: .net wpf wcf


【解决方案1】:

如果你的意思是这样的:

Service1
Service2
Service3
.
.
.
Service n

所有服务都在一个端点,比如http://localhost/MyServices/Services,那么我相信答案是否定的。地址、绑定和合同 (ABC) 构成端点,每个端点必须有一个唯一的地址。

所以即使你尝试了类似的东西:

端点 1:

地址:http://localhost/MyServices/Services
绑定:wsHttpBinding
合同:Service1

端点 2:

地址:http://localhost/MyServices/Services
绑定:wsHttpBinding
合同:Service2

您会遇到端点 2 的问题,因为它与端点 1 具有相同的地址。

Specifying an Endpoint Address

Hosting Multiple Services

【讨论】:

    【解决方案2】:

    每个服务/绑定/合同组合必须使用离散地址,因此必须是单独的端点

    但是,就您的客户端而言,只要您使用相同的传输协议,您就可以使用 WCF 4 路由服务来提供单个可寻址端点,然后使用其他标准(例如操作或其他 SOAP 标头)来路由到正确的服务

    【讨论】:

      【解决方案3】:

      一种解决方法是实现部分类,允许您将内容分离到单独的 cs 文件中,同时保持单个接口和端点。这不是最理想的方式,因为归根结底它仍然是由部分类组成的单个类,但至少看起来您有单独的服务,因为每个服务都有一个类文件。

      示例结构:

      IMyService.cs

      [ServiceContract]
      public interface IMyService
      {
         [OperationContract]
         string GenericMethod()
      
         [OperationContract]
         string GetUsers(int companyId)
      
         [OperationContract]
         string GetMessages(int userId)
      
      }
      

      MyService.cs

      //Put any attributes for your service in this class file
      [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
      public partial class MyService : IMyService
      {
        public string GenericMethod() 
        {
           return "";
        }
      }
      

      UserService.cs

      public partial class MyService
      {
          public string GetUsers(int companyId) 
          {
             return "";
          }
      }
      

      MessagingService.cs

      public partial class MyService
      {
            public string GetMessages(int userId) 
            {
                return "";
            }
      }
      

      【讨论】:

        【解决方案4】:

        您可以做的是创建一个新接口,该接口公开您要公开的所有接口,然后创建一个仅将请求委托给正确类的类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-19
          • 1970-01-01
          • 1970-01-01
          • 2011-04-18
          • 1970-01-01
          • 1970-01-01
          • 2022-01-16
          • 1970-01-01
          相关资源
          最近更新 更多