簡體   English   中英

暴露net.tcp端點

[英]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. 所以現在我必須實際添加另一個端點(http)以通過mexhttpbinding公開元數據?
  2. 是否有一種通過tcp公開端點的簡單方法?

兩件事情:

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM