2014-06-24 29 views
0

我是WCF新手,我在IIS 7/Windows 2008服務器上的託管wcf服務(.net framework 4.0)中面臨併發性相關問題。 Google搜索後我做了所有的可能性,但仍無法解決我的問題。我創建並使用實體框架像ItemHeadMaster獲取從SQL Server表中的數據清單服務,ItemMasterASP.Net Framework 4.0 WCF併發

我在供搜索我的自定義用戶搜索控制引用這個WCF。當2個併發用戶打在ASP.Net頁面上的搜索控件時,所有的都運行良好。

我的代碼如下所示:

namespace HIS.STORESERVICES 
{ 
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)] 
    public class StoreMasterData : IStoreMasterData 
    { 
public string GetAllItemHead(string strHospitalId) 
     { 
      using (DAL.ItemHeadMaster objItemHeadMasterDAL = new DAL.ItemHeadMaster()) 
      { 
       List<STORE.MODEL.ItemHeadMaster> objItemHeamMasterList = new List<STORE.MODEL.ItemHeadMaster>(); 
       objItemHeamMasterList = objItemHeadMasterDAL.GetAllItemHead(strHospitalId); 
       XmlSerializer Xml_Serializer = new XmlSerializer(objItemHeamMasterList.GetType()); 
       StringWriter Writer = new StringWriter(); 
       Xml_Serializer.Serialize(Writer, objItemHeamMasterList); 
       return Writer.ToString(); 
      } 
     } 
} 

我沒有谷歌搜索後,以下:

  1. 添加了配置,但在配置沒有作用

    <system.net> 
        <connectionManagement> 
         <add address="*" maxconnection="100" /> 
        </connectionManagement> 
    </system.net>` 
    
  2. 添加但沒有作用相反它變得更慢..

    <behaviors> 
        <serviceBehaviors> 
         <behavior> 
          <serviceMetadata httpGetEnabled="True" /> 
          <serviceThrottling maxConcurrentCalls="32" 
              maxConcurrentInstances="2147483647" 
              maxConcurrentSessions="20"/> 
    

請幫

+0

你有什麼問題?性能或運行時錯誤? – ZZZ

+0

性能問題,頁面幾乎掛起。 –

+1

爲什麼地球上你手動XML序列化你的數據? WCF會自動爲你做這個。所以基本上你是先將XML序列化,然後WCF再次執行它.....只需返回一個'List ',讓WCF完成工作! –

回答

1

WCF之前,構建在同一臺主機進程之間的交叉過程中的通信服務,或在同一局域網內,或在互聯網上,你必須手工工藝交通目標環境和特定協議的圖層和數據序列化。使用WCF,您只需要專注於創建數據模型(經過屬性修飾後的DataContracts)和操作模型(OperationContracts),並且.NET CLR將「創建」大多數(如果不是全部)所需的傳輸層和數據序列化,運行時間,根據您或目標環境中的系統管理員定義的配置。

的缺陷驗證碼:

  1. WCF通常使用的DataContractSerializer,而不是XmlSerializer的序列化的東西,而你並不需要顯式調用它,因爲運行時會做的。
  2. 對於大多數應用程序,您不需要顯式地使用ServiceBehaviorAttribute。在使用那些不適合初學者的優勢配置之前,您必須深入瞭解WCF。我很少使用它們。

您的服務接口函數應該舒適地返回複雜類型而不是序列化文本。在99.9%的情況下,如果你在WCF程序中有明確的序列化代碼,那麼如果不是完全錯誤的話,整個設計是非常骯髒的。

有很多關於創建Hello World WCF項目的教程,並且VS在創建新的WCF應用程序時爲您提供了一個。之後你的Hello World熟悉了,你可以看看http://www.codeproject.com/Articles/627240/WCF-for-the-Real-World-Not-Hello-World

BTW,WCF序列化是非常快的,檢查http://webandlife.blogspot.com.au/2014/05/performances-of-deep-cloning-and.html

+0

感謝Andy,現在執行速度很快,但是在4-5並行命中之後它開始給出超時錯誤「請求通道超時,等待00:00:59.9990000之後的回覆。對Request的調用或增加Binding上的SendTimeout值。分配給此操作的時間可能是更長時間的一部分。「 –

+0

我正在使用wsHTTPBinding –

+0

完成!我修復了超時問題!!謝謝 –