2012-06-19 86 views
11

我已經成功創建了一個WCF服務,該服務的工作方式如何。唯一的問題是,我無法從WCF服務運行的實際機器以外的任何地方訪問Web服務。從其他設備訪問本地主機WCF?

據我所知,卡西尼Web服務是本地唯一的,我希望能夠給我的客戶系統上運行WCF服務時,他們需要的服務在我的桌面應用程序。

有誰知道一個簡單的方法來做到這一點無需客戶安裝除在.NET Framework些什麼?

感謝

回答

12

使用self-hosting在自己的應用程序/服務的主機。如果您已經擁有WCF服務,那麼創建一個Windows服務並將其託管在該服務中應該很簡單(請參閱鏈接)。

+0

我已經使用了WebServiceHost,但它似乎不適用於我。訪問我的系統的IP:端口不會顯示服務頁面 –

+9

可能是防火牆,或者用戶沒有足夠的權限來託管您正在使用的端口。 http://msdn.microsoft.com/en-us/library/ms733768.aspx – driis

+0

你能解釋我需要採取的場景嗎?如果我使用REST,我將如何允許像我的iPhone這樣的遠程設備通過基於JS的HTML文件 –

3

WCF不需要Web服務器來託管服務。但是,需要運行某個控制檯/主機應用程序或Windows服務。然後在啓動時,它可以通過創建一個ServiceHost類的實例來公開該服務。參見MSDN樣品在http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx

+1

查看我發佈在driis中的評論 –

+1

ServiceHost,而不是WebServiceHost,除非您的WCF服務使用基於REST的方法(WebGet等) – Rich

+1

是的,它使用的是REST基礎方法。任何其他想法? –

2

要運行WCF服務,您需要一個主機進程。這是沒有辦法的。

如果主機過程(取決於什麼要求,部署模型,網絡限制等適用於您的情況)是一樣的桌面應用程序,然後在你的桌面應用程序中嵌入的服務。這種技術被稱爲「in-proc」WCF託管。它基本上是「自我託管」客戶端應用程序中的服務。如果採用此解決方案,請使用IPC(net.pipe)綁定,因爲它更爲優化,並且會清除所有潛在的網絡/防火牆考慮事項。

如果服務需要在不同的計算機上運行,​​或者在不同的進程,那麼你需要使用或實現主機應用程序。 IIS,WAS,AppFabric和WCFServiceHost(不是生產級主機)都是可以使用的即用型主機的一些示例。如果你不能或不想使用它們,你將需要實現你自己的主機應用程序,並在其中包含WCF服務的「Self Host」。您的應用程序可以是任何東西:控制檯,桌面,Windows服務等。如果您不希望用戶擔心如何以及何時啓動主機,請確保它始終運行。建議自動啓動的Windows服務。

如果服務需要從客戶端不同的計算機上運行,​​然後確保服務器和客戶端之間的所有網絡設備和軟件(防火牆,路由器,網關等)是否正確配置爲您的結合上班。注意你的綁定操作的協議(http,tcp等)和端口(80,443,808等)。

0

這裏是力量的建議,如果不適合,請忽略它:使用自託管服務爲@driis提及。這是您的場景的最佳選擇。關於在你的WCF服務中託管一個HTML頁面......是的,這是可能的,但這不是一個簡單的解決方案。總而言之,您必須創建自定義消息formater並繞過WCF提供的默認消息。您將創建一個必須從WebHttpBehavior繼承的HtmlBehavior,必須從BehaviorExtensionElement繼承的HtmlBehaviorExtension以及最終實現IDispatchMessageFormatter的HtmlFormater。在下面的鏈接中,您會發現一篇關於自定義格式化程序的優秀文章:http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx

相關問題