2015-03-18 52 views
1

這是我第一次使用WCF服務,並且對此有一些疑問。我有一個項目的佈局,看起來像以下:如何確保WCF服務始終可供所有人使用?

  • WCF項目
  • 客戶端項目(其作爲服務引用WCF項目的引用)
    • 我提供的Http://地址創建當我添加服務引用時運行WCF項目作爲服務地址。
    • 每次我運行客戶端應用程序,我也跑了WCF項目,以確保WCF服務時,客戶想使用它
    • 我知道,這是一種不可持續的設計總是可用的,因爲不必每次運行WCF項目當我想使用WCF服務是不會解決的。

此外,

  • 我在團隊環境中,我也想確保當我的隊友從我這裏得到最新的代碼,他們可以不必擔心運行的客戶端應用程序關於WCF應用程序

我該如何做到這一點?

+0

那麼,爲什麼不IIS下,你的團隊可以訪問的生產服務器上運行的服務?目前如何部署? – 2015-03-18 23:40:20

+1

您是否曾嘗試將WCF應用程序作爲服務運行而不是手動運行? WCF端是否從專用服務器運行?隊友們,他們正在運行他們自己的WCF應用程序版本嗎? – 2015-03-19 00:16:12

+1

您將不得不在IIS上或作爲Windows Service託管您的WCF服務。請參閱此處瞭解詳細信息https://msdn.microsoft.com/zh-cn/library/bb332338.aspx – 2015-03-19 00:17:03

回答

1

除了審查有關的WCF服務託管的一般信息,作爲一個新的WCF服務開發人員,你需要考慮以下服務方面:

實例化
的實例化行爲(通過使用ServiceBehaviorAttribute.InstanceContextMode屬性設置)控制如何創建InstanceContext以響應傳入消息。

  • PerCall:爲每個客戶端請求
  • PerSession創建一個新的實例:爲每個新客戶端創建一個新的實例
  • 單:單個實例處理所有客戶端請求

每有優點和缺點,所以您需要爲您的服務方案選擇適當的行爲。

併發
併發是在任一個時刻活性在的InstanceContext線程的數量的控制。這是通過使用ServiceBehaviorAttribute.ConcurrencyModeConcurrencyMode枚舉來控制的。

  • 單:一個線程處理的實例上下文同時消息
  • 多:每個服務實例可以有多個線程同時處理消息。
  • 可重入:每個服務實例一次處理一條消息,但接受重入操作調用。

節流
ServiceThrottlingBehavior類暴露,你可以用它來限制如何在應用程序級別創建許多實例或會話的性能。使用此行爲,可以微調Windows Communication Foundation(WCF)應用程序的性能。

 <serviceBehaviors> 
     <behavior name="ThrottledService"> 
      <serviceThrottling 
      maxConcurrentCalls="n" 
      maxConcurrentInstances="n" 
      maxConcurrentSessions="n" /> 
     </behavior> 
     </serviceBehaviors> 

參考文獻: https://msdn.microsoft.com/en-us/library/ms731193%28v=vs.110%29.aspx https://msdn.microsoft.com/en-us/library/vstudio/ms735114%28v=vs.100%29.aspx