在不同端点上实现多个协定的服务类的WCF配置

在不同端点上实现多个协定的服务类的WCF配置,wcf,Wcf,我有一个MyService类实现IService1和IService2接口。我想在两个不同的端点上公开这两个契约,如: IService1在/Service/S1 IService2在/Service/S2 这样的配置看起来怎么样?试试这个 <services> <service name="Service"> <endpoint address="http://localhost:8080/Service/S1"

我有一个
MyService
类实现
IService1
IService2
接口。我想在两个不同的端点上公开这两个契约,如:

  • IService1
    /Service/S1
  • IService2
    /Service/S2
这样的配置看起来怎么样?

试试这个

<services>      
  <service name="Service">
    <endpoint address="http://localhost:8080/Service/S1"
              binding="basicHttpBinding"
              contract="IService1"

     />

    <endpoint address="http://localhost:8080/Service/S2"
              binding="basicHttpBinding"
              contract="IService2 "

     />
  </service>
</services>

试试这个

<services>      
  <service name="Service">
    <endpoint address="http://localhost:8080/Service/S1"
              binding="basicHttpBinding"
              contract="IService1"

     />

    <endpoint address="http://localhost:8080/Service/S2"
              binding="basicHttpBinding"
              contract="IService2 "

     />
  </service>
</services>

您可以使用具有两个端点的服务,如下所示:

<services>      
  <service name="MyNamespace.MyService">
    <endpoint address="/Service/S1"
              binding="basicHttpBinding"
              contract="IService1" />
    <endpoint address="/Service/S2"
              binding="basicHttpBinding"
              contract="IService2 " />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/"/>
      </baseAddresses>
    </host>
  </service>
</services>


编辑:添加了基址

您可以使用具有两个端点的服务,如下所示:

<services>      
  <service name="MyNamespace.MyService">
    <endpoint address="/Service/S1"
              binding="basicHttpBinding"
              contract="IService1" />
    <endpoint address="/Service/S2"
              binding="basicHttpBinding"
              contract="IService2 " />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/"/>
      </baseAddresses>
    </host>
  </service>
</services>


编辑:添加的基址似乎不是我想要的。MyService类是一个实现两个接口的类:IService1和IService2。根据service.name属性必须映射到类型名称。如果MyService是实现契约的唯一类型,那么它在配置中不能使用两次。@Marcin Seredynski:你说得对-服务类在配置中不能使用两次-只有一种可能。但是:您仍然可以在两个单独的地址上定义两个单独的端点,一个用于服务类实现的每个契约-这就是您想要的,不是吗?这似乎不是我想要的。MyService类是一个实现两个接口的类:IService1和IService2。根据service.name属性必须映射到类型名称。如果MyService是实现契约的唯一类型,那么它在配置中不能使用两次。@Marcin Seredynski:你说得对-服务类在配置中不能使用两次-只有一种可能。但是:您仍然可以在两个单独的地址上定义两个单独的端点,一个用于服务类实现的每个契约-这就是您要寻找的,否??由于某种原因,这种方法不起作用:服务无法启动。System.InvalidOperationException:找不到与绑定BasicHttpBinding的终结点的方案http匹配的基址。注册的基址方案为[]。请注意,我正在通过向ServiceHost传递服务实例和端点Uri来实例化ServiceHost。由于某些原因,此方法不起作用:无法启动服务。System.InvalidOperationException:找不到与绑定BasicHttpBinding的终结点的方案http匹配的基址。注册的基址方案是[]。请注意,我正在通过向ServiceHost传递服务实例和端点Uri来实例化ServiceHost。