2011-12-07 67 views
3

所以我創建了winforms客戶端,並將wcf類庫添加到解決方案中。自主主機wcf添加服務參考

在的WinForms我做

ServiceHost svc = new ServiceHost(typeof(...), new Uri("net.pipe://localhost/MyNamedPipe")

然後svc.Open()它執行罰款。

現在,我如何添加一個服務引用,所以在相同的winforms我可以得到該wcf的代理?

我只能通過使用ASP.NET開發服務器(它在winforms運行時啓動,因此我複製該URL,停止調試(開發服務器仍在運行),然後從那裏添加服務引用)來生成該服務。但我猜這是不正確的。

當然,我可以直接引用wcf契約類並使用它,但那也不合適。

回答

4

當你控制兩端那樣,我更喜歡使用的ChannelFactory

NetNamedPipeBinding binding = new NetNamedPipeBinding(); 
EndpointAddress address = new EndpointAddress("net.pipe://localhost/MyNamedPipe"); 
ChannelFactory<YourInterface> factory = new ChannelFactory<YourInterface>(binding, address); 
YourInterface yourInterface = factory.CreateChannel(); 
+0

爲什麼這是可取的? – Nickolodeon

+0

因爲通過添加一個對你自己的服務的引用,你會最終動態生成重複代碼。 –

+0

我寫了svc = new ServiceHost(typeof(TokenizationService1.TokenizationService), new Uri(「net.pipe:// localhost/MyNamedPipe 「)); svc.Open(); 的ChannelFactory F =新的ChannelFactory ( 新NetNamedPipeBinding(), 新的EndpointAddress(」 net.pipe://本地主機/ MyNamedPipe「)); service = f.CreateChannel(); – Nickolodeon

1

您是否嘗試過向項目添加服務引用...,然後直接在對話框的地址框中輸入您的URI?

請注意,這應該是完整的URI,例如net.pipe:// localhost/MyNamedPipe。

您可以從MSDN here中找到分步說明。

+0

我不知道我們可以做到這一點。但是當我點擊發現,它給了我解決方案中的服務,並指示我一些http:// localhost:3049,儘管我把netPipeBinding放在服務配置中。 – Nickolodeon

+0

@Nickolodeon:不要單擊Discover,只需輸入完整的URI:net.pipe:// localhost/MyNamedPipe。 –

+0

@Nickolodeon:用附加信息更新答案。 –