我试图在同一个端口上托管几个WCF REST服务。我启动了Net.Tcp端口共享服务,这是我的app.config文件:
<?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。“
编辑:
<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>我想应该缺少什么东西来启用端口共享吧?
发布于 2011-08-26 10:10:31
你想做的事毫无意义。“港口共享”可以通过两种方式实现:
但是,(仅)端点被配置为使用HTTP绑定,而不是Net.Tcp绑定(如果您想使用REST风格的服务,这反过来也是有意义的),因此Net.Tcp端口共享在这里不适用。
如果没有更多关于你到底想做什么,你看到了什么错误的信息,就很难帮助你。
编辑
还是很困惑。从您的app.config看来,您似乎使用端口80作为端点,但是您引用的错误消息显示端口8080。无论如何,以下内容都是适用的。
从您提供的错误消息来看,您似乎试图使用完全相同的端点URI注册/启动服务两次。这不管用。您可以重用hostname:port部件,甚至路径的部分,但是完整的URI必须是唯一的。
例如,可以使用以下端点URI:
注意,对于Net.Tcp端口共享来说,这是一样的--您可以共享端口,但不能共享完整(唯一)端点URI。因此,名称“端口”共享。它不是透明的负载平衡机制之类的。
发布于 2012-01-24 23:32:17
即使有一个被接受的答案,我还是会说我在编程定义服务时遇到了类似的问题。我创建该服务的方式如下:
_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值创建您的服务,它会成功启动吗?
<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>https://stackoverflow.com/questions/7203090
复制相似问题