Сервер WCF — асинхронный метод

#wcf

#wcf

Вопрос:

Я новичок в WCF. У меня есть служба WCF с методом

 public string DoSomething(int i);
  

Я вызываю этот метод от одного клиента, и следующий клиент не может получить результаты от этого метода, пока первый клиент не завершит метод.
Как сделать эти вызовы асинхронными?

Моя служба WCF:

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MyService : IMyService
  

Моя конфигурация:

 <system.serviceModel>
        <services>
            <service name="MyService" behaviorConfiguration="ServiceBehavior">
                <endpoint contract="IMyService" binding="basicHttpBinding"/>
                <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                    <!--true-->
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
    </system.serviceModel>
  

Комментарии:

1. Как вы размещаете службу и какое поведение имеет ваша служба? Вы не предоставили абсолютно никакой информации, описывающей ваш сервис.

2. я запускаю эту службу из VS в режиме отладки — может быть, это причина того, что один клиент блокирует другого, и в обычной ситуации он хочет появиться?

3. Какой тип хостингового приложения вы используете?

Ответ №1:

Если вы хотите выполнять асинхронные вызовы вашей службы:

В обозревателе решений Visual Studio перейдите к ссылке на вашу службу в проекте, который содержит ваше клиентское приложение. Щелкните правой кнопкой мыши ссылку на вашу службу и выберите «Настроить ссылку на службу», затем установите флажок «Генерировать асинхронные операции», затем нажмите «ОК».

Это не должно быть необходимым, поскольку вы можете настроить свой сервис для обработки нескольких запросов. Возможно, вы захотите посмотреть, как вы настроили InstanceContextMode и ConcurrencyMode. Базовая привязка HttpBinding не поддерживает сеансы, поэтому ваш сервис, вероятно, по умолчанию использует InstanceContextMode .Вызов. Для получения дополнительной информации см. Сеансы, создание экземпляров и параллелизм

Возможно, у вас есть что-то, ограничивающее количество вызовов. Для получения более подробной информации см. ServiceThrottlingBehavior