2013-01-24 52 views
0

我有一個簡單的WCF服務,它在指定爲param的位置創建一個目錄。 該服務作爲Windows服務託管,並以管理員帳戶運行。在WCF中實現排隊

InstanceContextMode是單一的,併發性也是如此。

該方法創建後返回目錄位置的字符串。

客戶端正在使用ASP.NET從另一臺計算機訪問此服務。 他有一個用例,他在幾秒鐘內多次點擊頁面上的按鈕,例如在2秒內點擊5次。發生什麼事是該服務創建只有2或3個文件夾不是全部5.

我知道有一個默認的排隊機制在WCF和我的服務它要麼不工作,或者我沒有寫它使用該機制。

我該如何解決這個問題。

下面是按鈕的ASP.NET代碼點擊

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ClientClass objClientClass = new ClientClass(); 

    string returnValue = string.Empty; 
    Random random = new Random(); 

    string uid = random.Next().ToString(); 
    returnValue = objClientClass.StartWorkflow(uid); 
    Label1.Text = returnValue; 

} 

這裏的主機的app.config:

<configuration> 
    <system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" 
       switchValue="All" 
       propagateActivity="true"> 
    <listeners> 
     <add name="traceListener" /> 
    </listeners> 
    </source> 
    <source name="System.ServiceModel.MessageLogging" 
       switchValue="All" 
       propagateActivity="true"> 
    <listeners> 
     <add name="traceListener" /> 
    </listeners> 
    </source> 
</sources> 
<sharedListeners> 
    <add name="traceListener" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="Traces.svclog" /> 
</sharedListeners> 

</system.diagnostics> 
<system.web> 
<compilation debug="true"></compilation> 
</system.web> 
<system.serviceModel> 
    <diagnostics> 
    <messageLogging logEntireMessage="true" 
        logMessagesAtServiceLevel="false" 
        logMessagesAtTransportLevel="false" 
        logMalformedMessages="true" 
        maxMessagesToLog="5000" 
        maxSizeOfMessageToLog="2000"> 
    </messageLogging> 
</diagnostics> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="NewBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceThrottling maxConcurrentCalls="1" maxConcurrentSessions="5" maxConcurrentInstances="5" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service behaviorConfiguration="NewBehavior" name="Utilities.WS.SampleWebService.Jobs"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" 
     contract="Utilities.WS.SampleWebService.IJobs" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    <host> 
     <baseAddresses> 
     <add  baseAddress="http://00.00.000.00:8732/Utilities.WS.SampleWebService.Jobs" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
</system.serviceModel> 
</configuration> 

問候。

+1

啓用您的服務跟蹤,看看有多少信息沒有您的服務收到。那麼你會明白,天氣問題是在你的asp端或WCF端 – Alex

+0

嗨@voo,我啓用了跟蹤。 svcLog顯示該服務從5次點擊中只收到3次請求,我可以看到3次請求的結果。那麼餘下的2發生了什麼? – Codehelp

+1

在我看來,這個問題並不在你的服務中。它可以在你的Button1_Click處理程序中嗎?我的意思是你可以點擊5次,但它只會觸發3次。並嘗試更改您的限制中的MaxConcurrentCalls(當前正在執行的服務的調用次數) – Alex

回答

0

第1步。從客戶端(服務器端ASP.NET代碼,而不是瀏覽器)ping,它可以到達託管WCF服務的計算機嗎?防火牆位於Web服務器和WCF的託管位置之間?

STEP 2. SVC日誌 設置svclog從您的配置文件,

<configuration> 
    <system.diagnostics> 
     <sources> 
      <source name="System.ServiceModel" 
        switchValue="Information, ActivityTracing" 
        propagateActivity="true"> 
      <listeners> 
       <add name="traceListener" 
        type="System.Diagnostics.XmlWriterTraceListener" 
        initializeData= "c:\log\Traces.svclog" /> 
      </listeners> 
     </source> 
     </sources> 
    </system.diagnostics> 
</configuration> 

然後從命令提示符下使用SvcTraceViewer - 尋找紅色。

STEP 3.添加一些記錄到你的操作並查看是否有實際執行

http://msdn.microsoft.com/en-us/library/ms732023(v=vs.110).aspx