2015-05-12 2 views
2

У меня есть простая служба WCF RESTful, размещенная в IIS. Я вызываю WCF с помощью браузера. Я вызываю службу одновременно, используя разные вкладки в браузере. Ниже приведен код для службыRESTful вызов WCF заблокирован до завершения предыдущего вызова

[ServiceContract] 
public interface IWCFService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "DoWork", ResponseFormat = WebMessageFormat.Json)] 
    string DoWork(); 
} 

public class WCFService : IWCFService 
{ 
    public string DoWork() 
    { 
     string ret = "Enter time is " + System.DateTime.Now + " " + System.DateTime.Now.Millisecond; 
     System.Threading.Thread.Sleep(10000); 
     ret += ". Exiting time is " + System.DateTime.Now + " " + System.DateTime.Now.Millisecond; 
     return ret; 
    } 
} 

И ниже файл web.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WCFService.WCFServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="WCFService.WCFServiceBehavior"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="WCFService.WCFServiceBehavior" name="WCFService.WCFService"> 
     <endpoint address="" binding="webHttpBinding" contract="WCFService.IWCFService" behaviorConfiguration="WCFService.WCFServiceBehavior"> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 

Даже если я ввожу адрес в быстрых сукцессиях время окончания первого есть начало время из второй, например, выход одной страницы

  • Введите время 12/05/2015 4:55:24 PM 568.
  • время Выхода в 12/05/2015 4:55:34 PM 569.

то следующая страница

  • Введите время 12/05/2015 4:55:34 PM 578.
  • время Выход в 12/05/2015 4:55:44 PM 579.

Что может быть причиной этого и как его можно исправить, чтобы все вызовы обрабатывались сразу же после их прибытия?

ответ

1

Я не уверен, но вы можете попытаться установить ConcurrencyMode на кратному с ServiceBehavior атрибутом на реализующего класса

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class WCFService : IWCFService 
+0

Почему вы заходящего 'InstanceContextMode = InstanceContextMode.Single'? - в требовании OPs нет ничего, что должно ограничивать обслуживание одним экземпляром. –

+0

Вы правы, я скопировал его с помощью сервиса здесь – Laurijssen

+0

OK Я дал вам передержку для вызова параллелизма. –

Смежные вопросы