簡體   English   中英

WCF:在自托管服務中控制服務端點名稱

[英]WCF: Controlling service endpoint name in self-hosted service

我有Windows服務中托管的WCF服務。 該服務需要在用戶的一台計算機上運行,​​並且駐留在另一台計算機上的客戶端應用程序將訪問該服務。 該服務將通過BasicHttpBinding公開。 該服務器將使用.NET 4.0在C#中實現。 客戶端將使用.NET 3.5(外部要求)實現。

為了將整個WSDL壓縮到單個文件(而不是多個XSD)中,我對服務進行了一些調整。 例如, 此處概述了執行此操作的過程。

我通過“ localhost”端點公開服務,即:

ServiceHost serviceHost = new ServiceHost(serviceInstance, "http://localhost:8080/...");

相對於上述基址,其端點公開為URI。

我的問題是,使用VS2010的“添加服務參考”生成代理時,我得到了一個代理,其默認ctor連接到“ http:// localhost:8080 / ...”端點。 如果服務與客戶端托管在同一台計算機上(例如,在測試過程中),則此方法運行良好,但是當服務器和客戶端計算機分離時,該服務顯然會失敗:客戶端計算機沒有終結點在偵聽“ http:// localhost: 8080 / ...”。

WSDL文件包含:

<wsdl:service name="MyService">
    <wsdl:port name="BasicHttpBinding_IMyService" binding="tns:BasicHttpBinding_IMyService">
        <soap:address location="http://localhost:8080/MyService/IMyService" />

當然,我可以使用一個不同的ctor來接收要連接的真實主機名,但是鑒於我使用主機的真實地址生成了客戶端,因此我有點希望客戶端自動連接到該端點。

我在幾個論壇上看到,可以使用主機名或IP來代替在服務器上使用localhost。 但是,主機可能具有多個主機名和/或IP,並且該服務將不知道選擇哪個主機。

有沒有一種方法可以使自動生成的代理使用“真實”服務器的地址(如用於創建代理的WSDL的URL中所示)?

您無法在App.config的<system.serviceModel>部分中指定嗎? 也許您可以覆蓋端點地址,但是您可以絕對覆蓋元地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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