2013-05-25 67 views
1

我已經創建了一個WCF服務(DLL文件),並且可以在解決方案中的「相鄰」項目中向其添加服務引用時使用它。Windows窗體應用程序中的主機WCF

我希望使這個WCF服務可以在Windows窗體應用程序中訪問/託管它。我需要從遠程位置使用它,並需要通過URI訪問它。 (IP地址:端口!?)

我不確定的是,如何在Windows窗體應用程序中託管它?我已經走了很多例子,但我不能完全支持需要做什麼......

我是否將DLL文件引用添加到新的Windows窗體應用程序,並以某種方式「殼」該DLL文件? 我可以將我的WCF服務項目類型更改爲Windows Forms項目嗎?這裏需要發生什麼?

我將不勝感激一些基本的例子,我可以建立。我沒有優先考慮綁定,但儘管我現在將從另一個遠程Windows窗體應用程序訪問它,但最終它將被遠程ASP.NET Web應用程序訪問/使用。

現在,我需要得到它工作:

遠程Windows窗體應用程序< --->(服務器)WCF服務(在自己的Windows窗體託管應用程序)

我該怎麼辦這個?

+0

不清楚爲什麼你有要求說_ *服務器* wcf託管在winapp_。我相信有辦法這樣做,但問題是你應該怎麼做?創建Web Service的一個基本原理是它可以跨客戶端重用。如果客戶端可以通過http進行連接,那麼WCF/IIS聽起來應該是這樣。任何客戶端都可以連接到它(甚至一個winapp)。你在你的文章中提到這種情況,我想「簡化」是第一順序.... – EdSF

+0

嗨EdSF,我不確定你指的是什麼?我需要一個多對一的類型設置。許多客戶端連接到一個WCF服務(託管在應用程序中,我不希望在託管它的計算機上設置IIS)? –

+0

可能有用:* [使用Windows窗體託管WCF服務庫](http://www.dotnetcodecentral。com/Post/43/wcf-hosting/host-wcf-service-using-windows-forms)* –

回答

1

如果我理解正確,而不是ASP.NET,這聽起來像你正在尋找自我託管。見How to: Host a WCF Service in a Managed Application

你的服務可以留在自己的類庫中;你只需要從Windows Forms項目實例化它。例如,複製Program.Main()到您的Program.cs,更換...

Console.WriteLine("The service is ready at {0}", baseAddress); 
Console.WriteLine("Press <Enter> to stop the service."); 
Console.ReadLine(); 

...線與...

Application.EnableVisualStyles(); 
Application.SetCompatibleTextRenderingDefault(false); 
Application.Run(new Form1()); 

...那些通常包含在Windows窗體項目。

+0

謝謝,這工作。使用提供的鏈接中的信息,我創建了一個winforms應用程序,添加了我的類和接口類,並使用代碼示例打開服務主機。作爲參考使用這個答案的人的一個問題,我沒有使用使用塊...不知道我是否錯過了他們爲什麼在那裏的原因......因爲代碼顯然在使用結束時關閉了服務主機。 。 –

+0

如果在執行服務期間拋出異常,'using'將會很有用,因爲不會到達Close()。但是,還有其他問題:有關更多詳細信息,請參閱此其他答案(以及原始問題中的討論):http://stackoverflow.com/questions/573872/what-is-the-best-workaround-for -the-wcf-client-using-block-issue/5048865#5048865 – Luis

1

嘗試......

您已經創建的WCF庫DLL文件引用添加到新的Windows應用程序項目,並在任何情況下,如按一下按鈕,嘗試下面的代碼。

ServiceHost sh = new ServiceHost("http://localhost:9092/MyService") 
sh.open(); 
+0

嗨Pradeep。儘管從路易斯提供的解決方案中,我可以看出您的解決方案是正確的,路易斯提供了完整的解決方案。謝謝。 –