首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF服务端口共享问题

WCF服务端口共享问题
EN

Stack Overflow用户
提问于 2011-08-26 10:01:22
回答 2查看 4.3K关注 0票数 1

我试图在同一个端口上托管几个WCF REST服务。我启动了Net.Tcp端口共享服务,这是我的app.config文件:

代码语言:javascript
复制
<?xml version="1.0"?>
<configuration>

  <system.serviceModel>    
    <services>  
      <service name="MyService">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/services/"/>
          </baseAddresses>
        </host>

        <endpoint
          address="test"
          binding="webHttpBinding"
          contract="IMyService"/>
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <bindings>
      <netTcpBinding>
        <binding name="PortSharingEnabled" portSharingEnabled="true">
        </binding>
      </netTcpBinding>
    </bindings>

  </system.serviceModel>

</configuration>

我仍然不能在同一个端口上承载两个服务。

当我尝试运行第二个服务时,我会得到以下错误:http://screencast.com/t/Vlakb26XbuQr。“本地计算机上的服务服务启动后停止。一些服务在其他服务或程序不使用时自动停止”。

跟踪日志(http://screencast.com/t/tJ5Gvmy4Dgm7)说:"HTTP无法注册URL http://+:7778/MyServiceName/。另一个应用程序已经向HTTP.SYS__注册了该URL。“

编辑:

代码语言:javascript
复制
<services>
  <service name="Service1">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/"/>
      </baseAddresses>
    </host>
    <endpoint
      address="first"
      binding="webHttpBinding"
      contract="IService1"/>
  </service>
  <service name="Service2">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/"/>
      </baseAddresses>
    </host>
    <endpoint
      address="second"
      binding="webHttpBinding"
      contract="IService2"/>
  </service>
</services>

我想应该缺少什么东西来启用端口共享吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-26 10:10:31

你想做的事毫无意义。“港口共享”可以通过两种方式实现:

  • Http:这在Windows上是开箱即用的,因为HTTP是由HTTP.SYS内核级驱动程序处理的。你没必要做什么特别的事。
  • Net.Tcp端口共享。这需要这里概述的步骤。

但是,(仅)端点被配置为使用HTTP绑定,而不是Net.Tcp绑定(如果您想使用REST风格的服务,这反过来也是有意义的),因此Net.Tcp端口共享在这里不适用。

如果没有更多关于你到底想做什么,你看到了什么错误的信息,就很难帮助你。

编辑

还是很困惑。从您的app.config看来,您似乎使用端口80作为端点,但是您引用的错误消息显示端口8080。无论如何,以下内容都是适用的。

从您提供的错误消息来看,您似乎试图使用完全相同的端点URI注册/启动服务两次。这不管用。您可以重用hostname:port部件,甚至路径的部分,但是完整的URI必须是唯一的。

例如,可以使用以下端点URI:

  • http://localhost:8080/myservice/ServiceInstance1
  • http://localhost:8080/myservice/ServiceInstance2

注意,对于Net.Tcp端口共享来说,这是一样的--您可以共享端口,但不能共享完整(唯一)端点URI。因此,名称“端口”共享。它不是透明的负载平衡机制之类的。

票数 1
EN

Stack Overflow用户

发布于 2012-01-24 23:32:17

即使有一个被接受的答案,我还是会说我在编程定义服务时遇到了类似的问题。我创建该服务的方式如下:

代码语言:javascript
复制
_serviceHost = new ServiceHost(_cmdService, new Uri(_serviceAddress));

ServiceEndpoint endPoint =
    _serviceHost.AddServiceEndpoint(typeof(IHttpCmdService), _binding, _endpointAddress);
endPoint.Behaviors.Add(new WebHttpBehavior());

令人惊讶的是,当我尝试使用相同的_serviceAddress和不同的_endpointAddress值多次执行此操作时,它会失败。但是如果我把整个地址放到_serviceAddress中,它就成功了。这两种方法最终得到相同的最终服务URL。

因此,知道了这一点,我想知道如果您使用不同的baseAddress值创建您的服务,它会成功启动吗?

代码语言:javascript
复制
<services>
  <service name="Service1">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/first/"/>
      </baseAddresses>
    </host>
    <endpoint
      address=""
      binding="webHttpBinding"
      contract="IService1"/>
  </service>
  <service name="Service2">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7778/second/"/>
      </baseAddresses>
    </host>
    <endpoint
      address=""
      binding="webHttpBinding"
      contract="IService2"/>
  </service>
</services>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7203090

复制
相关文章

相似问题

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