[英]WCF Service Port Sharing problem
我試圖在同一端口上托管多個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>
我想缺少一些端口共享功能嗎?
您嘗試執行的操作沒有任何意義。 “端口共享”可以通過兩種方式發生:
Http:這在Windows上是開箱即用的,因為HTTP由HTTP.SYS內核級驅動程序處理。 您不需要做任何特別的事情。
Net.Tcp端口共享。 這需要此處概述的步驟。
但是,您(唯一的)端點被配置為使用HTTP綁定,而不是Net.Tcp-Binding(如果您要使用REST風格的服務,這將很有意義),因此Net.Tcp端口共享在此處不適用。
如果沒有更多關於您真正想做什么,看到的錯誤的信息,很難提供幫助。
編輯
仍然令人困惑。 在app.config
,看起來好像您正在將80端口用於端點,但是您引用的錯誤消息是8080端口。無論如何,以下內容仍然適用。
從您提供的錯誤消息來看,好像您試圖使用完全相同的端點URI兩次注冊/啟動服務。 這是行不通的。 您可以重用hostname:port
部分,甚至路徑的一部分,但是完整的URI必須唯一。
例如,您可以使用以下端點URI:
請注意,對於Net.Tcp端口共享,這是相同的-您可以共享端口 ,但不能共享完整(唯一)的端點URI。 因此,名稱共享為“端口”。 它不是透明的負載平衡機制。
即使有一個可接受的答案,我還是會以編程方式定義服務時拋出類似的問題。 我通過以下方式創建服務:
_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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.