2012-08-03 84 views
1

我有一個處理一些數據輸入和計費的winform應用程序。我想添加一個WCF服務,只能通過本地局域網訪問。我希望我的結算程序查詢我的數據庫併爲客戶端獲取一些數據。重要的是,這是在同一個程序中完成的,而不是創建另一個。如何將WCF服務添加到現有的Winforms應用程序?

我的問題是難以設置這樣的WCF服務,我從現有的winform應用程序開始而不是創建新的WCF服務。這是一個簡單的問題:使用正確的使用指令,或者從根本上缺少其他東西,因爲我沒有將它設置爲WCF服務。

另一個問題是我需要擔心線程問題還是由WCF服務自動處理?例如,如果10臺計算機同時查詢我的winforms應用程序,WCF將無縫處理該問題,或者我需要實現其他功能來處理此問題?

感謝您閱讀

+0

所以你的WCF服務應該在任何時候都可用,或者只有當你的Winforms應用程序正在運行? – 2012-08-03 06:34:07

+0

僅當我的Winforms應用程序正在運行時 – stormist 2012-08-03 06:35:58

回答

4

請看看這篇文章Hosting and Consuming WCF Services

Windows服務(從這篇文章中的例子)主辦的WCF的ServiceHost

using System; 
using System.ServiceModel; 
using System.ServiceProcess; 
using QuickReturns.StockTrading.ExchangeService; 

namespace QuickReturns.StockTrading.ExchangeService.Hosts 
{ 
    public partial class ExchangeWindowsService : ServiceBase 
    { 
     ServiceHost host; 

     public ExchangeWindowsService() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      Type serviceType = typeof(TradeService); 
      host = new ServiceHost(serviceType); 
      host.Open(); 
     } 

     protected override void OnStop() 
     { 
      if(host != null) 
       host.Close(); 
     } 
    } 
} 

另一個問題是,我需要擔心線程問題還是由WCF服務自動處理?例如,如果所有計算機都同時查詢我的winforms應用程序,WCF 將無縫地處理該問題,否則我需要實現其他 功能來處理此問題?

我認爲wcf很容易處理這個負載。但這取決於您想要對其執行的操作。

+0

打開新的ServiceHost類是否會自動打開一個新的線程?還是我必須做一些事情,以便我的winform應用程序在服務運行時仍可訪問?感謝偉大的信息 – stormist 2012-08-03 06:42:45

+0

我已經添加了一個wcf主機實現贏得服務表單的示例。 Reulst將會擁有自己的線程池。 – user854301 2012-08-03 06:45:34

7

基本上,創建一個WCF服務,你需要三樣東西:

  • 合同一個服務(通常表示爲一個.NET接口)來定義服務提供了方法。這也包括了什麼數據類型的方法需要(也可能返回)

    [ServiceContract(Namespace="http://services.yourcompany.com/Service/2012/08")] 
    interface IMyService 
    { 
        [OperationContract] 
        SomeReturnType ThisIsYourMethod(string input, int value, .....); 
    } 
    
    [DataContract(Namespace="http://data.yourcompany.com/Service/2012/08")] 
    public class SomeReturnType 
    { 
        [DataMember] 
        public string Name { get; set; } 
    
        [DataMember] 
        public int Age { get; set; } 
    } 
    
  • 創建實際的服務代碼服務實現被調用。這僅僅是一個普通的.NET類的實現了服務合同

    public class MyServiceImplementation : IMyService 
    { 
        SomeReturnType ThisIsYourMethod(string input, int value, .....) 
        { 
         /// .... do some processing, fetch data etc. 
         return ...... 
        } 
    } 
    
  • 一個服務主機實際承載WCF運行時和旋轉了整個WCF處理;這是一個ServiceHost實例(或派生類),它將能夠託管您的服務。這個類需要在Winforms應用程序的啓動過程中實例化並打開。一旦服務主機打開,您的服務就可以從外部被調用。當Winforms應用程序關閉時,您需要確保關閉服務主機。

  • 並且您可能還需要 - 另外 - 您的app.config文件中的一些配置設置用於定義您的WCF服務提供的全球端點(地址,綁定,合同)。

所以這真的很簡單 - 只需在Winform項目中創建這些項目,就完成了。

1

對於託管爲Windows服務和Web服務的服務,您的客戶還需要一個代理類才能訪問已公開的合同成員。

相關問題