[英]exposing net.tcp endpoint
我對如何在WCF中公開端點感到困惑
我有一個tcp端點和一個mex tcp端點。
<service name="MessageReaderService.MessageReaderService">
<endpoint name="NetTcpReaderService"
address="ReaderService"
binding="netTcpBinding" bindingConfiguration=""
contract="Contracts.IMessageReaderService" />
<endpoint name="netTcpMex"
address="mex"
binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8082" />
</baseAddresses>
</host>
</service>
當我嘗試在服務主機中運行它時,我得到以下異常:
在服務MessageReaderService實現的合同列表中找不到合同名稱“IMetadataExchange”。 添加ServiceMetadataBehavior到
配置文件或直接向ServiceHost啟用對此合同的支持。
所以我從這個錯誤中得出結論,我需要添加一個服務行為來公開元數據。
所以我添加了這個行為:
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
但后來我得到了一個不同的錯誤:
ServiceMetadataBehavior的HttpGetEnabled屬性設置為true,HttpGetUrl屬性是相對地址,但沒有http基址。 提供http基址或將HttpGetUrl設置為絕對地址。
兩件事情:
(1)一旦你定義了服務行為,你當然也必須將它應用到服務中!
<service name="MessageReaderService.MessageReaderService"
behaviorConfiguration="ServiceBehavior">
(2)您不需要HTTP端點 - 您不需要擁有HTTP URL - 只需定義此服務行為,如下所示:
<behavior name="ServiceBehavior">
<serviceMetadata />
</behavior>
您的元數據現在可通過mexTcpBinding
端點獲得 - 您無法使用HTTP瀏覽到它,但客戶端絕對可以連接到它並使用它!
您可以使用WCF測試客戶端驗證這一點,然后轉到其中
net.tcp://localhost:8082 (the base address)
要么
net.tcp://localhost:8082/mex (the mex address)
在這兩種情況下,WCF測試客戶端現在應該找到您的服務並能夠發現其功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.