2012-06-03 44 views
0

如何在運行時在我的winform UI中添加wcf服務。 我創建了一個返回主機運行進程的wcf服務。我想在我的winform應用程序中添加託管的機器服務。如何在運行時添加wcf服務

+1

當你說你想在運行時添加wcf服務你的意思是你沒有確切的結束點,但你知道服務公開的操作 –

+0

操作不公開。但每個服務的操作都是一樣的,我可以通過鏈接主機地址來使用它們嗎? – Enigma34

+1

如果操作不被公開,你會如何打電話給他們?即使您在針對該特定服務調用操作時所有服務的操作相同,也需要暴露操作。 –

回答

1

不知道你在這裏試圖做什麼。但是您需要知道兩件事才能調用WCF服務1)服務合同2)端點。現在不會從服務合同中逃脫,因爲您需要知道您可以使用的所有操作。但是,在WCF 4中,有一項稱爲WCF發現的新功能,可幫助您動態確定終點,即在RunTime。請參考以下鏈接http://msdn.microsoft.com/en-us/library/dd456791.aspx

2

您需要在運行時動態更改端點,因此您需要WCF Discovery

結構:

WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s) 

實現:

  1. How to: Implement a Discovery Proxy
  2. How to: Implement a Discoverable Service that Registers with the Discovery Proxy
  3. How to: Implement a Client Application that Uses the Discovery Proxy to Find a Service

拓撲:

  • 啓動搜索服務[結構骨架]
  • 啓動服務(S)每個服務將ANNOUNCE其啓動到發現服務]
  • 啓動客戶端(S )[每位客戶都會DISCOVER查找 & RESOLVE)服務從發現服務端點]

注:

  • 發現過程使用UDP(檢查你的防火牆,它可以阻止連接)
  • 服務必須宣佈其啓動,因此自己託管服務是好的,但IIS託管 5/6人不是因爲他們自動啓動時第一次調用發生!

解決IIS託管5/6問題:

這樣你就可以開始您的IIS託管手動5/6服務,而不被調用的第一次


您還可以使用WCF Routing Service

BROTHER提示:
不要走遠了無服務器(無骨幹,無BootleNeck,完全分佈式,..等)理想的拓撲結構,這會爆破你的頭,把你瘋了: d

對於一個初學者,我建議你這個教程[WCF Tutorials]

0

如果我理解你的問題正確,你需要一些代碼,會在運行時沒有在* config文件和使用任何配置中添加服務* .svc文件。

請參閱樣本:

Uri baseAddress = new Uri("http://localhost:8080/hello"); 
    // Create the ServiceHost. 
    using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) 
    { 
     // Enable metadata publishing. 
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
    smb.HttpGetEnabled = true; 
    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
    host.Description.Behaviors.Add(smb); 

    // Open the ServiceHost to start listening for messages. Since 
    // no endpoints are explicitly configured, the runtime will create 
    // one endpoint per base address for each service contract implemented 
    // by the service. 
    host.Open(); 

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

    // Close the ServiceHost. 
    host.Close(); 
} 

它在控制檯應用程序創建自託管服務。

http://msdn.microsoft.com/en-us/library/ms731758.aspx

是你問什麼?