0
我有一個負載測試器,調用我的WCF服務,並且我已經構建了它的選項來並行地運行調用。只有在並行運行時,所有線程都會收到以下錯誤:「服務器沒有提供有意義的回覆;這可能是由於合同不匹配,過早的會話關閉或內部服務器錯誤造成的。」WCF合同不匹配錯誤只有在並行運行時
這或多或少是我的代碼:
if (runMultiThreaded)
{
ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = System.Environment.ProcessorCount;
ParallelLoopResult loopResult = Parallel.For(0, numberOfTimesToTest, options,
(i, loopState) =>
{
myService.MyOperation();
if (loopState.ShouldExitCurrentIteration) return;
});
}
else
{
for (int i = 0; i < test1NumberOfRuns; i++)
{
myService.MyOperation();
}
}
任何想法?讓我知道你是否需要更多細節。
更新:myService是我的服務的操作契約接口的一個實例,它是使用CreateChannel方法使用ChannelFactory創建的。
謝謝!
這是一個通過ChannelFactory創建的通道,所以可以解釋它,謝謝。有沒有什麼方法可以用線程安全的方式來做到這一點,以便我不必爲每個線程創建一個實例?爲每個線程創建該實例的速度非常緩慢...... – Ceottaki
嗯...... CreateChannel應該是WCF land中更快的操作之一。相反,ChannelFactory創建通常是您可以做的最慢的事情之一。您正在使用您正在與之交談的服務的會話?怎麼認證?這顯然也會影響新創建的渠道。 –
我使用通道工廠創建通道的例程也使用OperationContext添加將傳遞身份驗證令牌的標頭。我不確定這會帶來多大的影響,但是我無法解決這個問題,令牌需要放在頭部,否則服務將無法工作。 – Ceottaki