Метод WCF не вызывается - PullRequest
       5

Метод WCF не вызывается

0 голосов
/ 28 октября 2010

У меня очень странная проблема.У меня есть служба WCF и консольное приложение, которое вызывает некоторые из его методов.В какой-то момент он больше не может вызывать одного из них.Он просто вызывает метод, но никогда не входит в него.Он просто ждет и ждет ... и ничего не происходит.

Должен ли я как-то обновить клиент службы?Я попытался создать новый объект клиента службы

QueryingServiceClient queryingClient = new QueryingServiceClient();

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

Есть идеи?

Спасибо.

Ответы [ 4 ]

1 голос
/ 28 октября 2010

Предположения:

  • ваша служба использует режим экземпляра сеанса (режим по умолчанию)
  • ваш клиент создает новый экземпляр прокси-сервера для каждого звонка в службу.
  • ваш клиент не располагает прокси после звонков.

Возможно, проблема в том, что вы исчерпали количество доступных слотов (в данном случае сеансов) до точки, где вы достигаете максимального числа одновременных сеансов. Затем ваш клиент будет ждать в зависимости от установленного времени ожидания для закрытия сеанса на стороне службы (что, очевидно, никогда не произойдет в этом случае).

Предлагаемые исправления:

  • Установите InstanceContextMode в PerCall, если только вам не нужны сеансы WCF.
  • Всегда закрывайте прокси после использования.

EDIT:

using (var proxy = new Proxy())
{
    // Use the proxy as much as needed
    proxy.Method();
}
0 голосов
/ 28 октября 2010

Странно, это не будет ждать и ждать вечно.Вы должны получить исключение тайм-аута WCF.Какое значение тайм-аута в вашем app.config?

Если вы не получаете никаких исключений тайм-аута, то, возможно, вы не вызываете этот метод обслуживания.Я знаю, это очевидно, но иногда методы с длинными именами можно спутать друг с другом.Если вы также отлаживаете клиента, вы, должно быть, исключили это.

0 голосов
/ 28 октября 2010

Спасибо за ваши ответы.

Это не навсегда, я не выразил себя правильно. Через некоторое время я получаю следующее исключение:

Превышено максимальное число повторов без ответа от удаленной конечной точки. Надежная сессия была провалена. Это часто указывает на то, что удаленная конечная точка больше не доступна.

Это синглтон. Это часть app.config:

<system.serviceModel>
    <bindings>
          <wsHttpBinding>
                <binding name="WSHttpBinding_QueryingService" closeTimeout="00:25:00"
                      openTimeout="00:25:00" receiveTimeout="00:25:00" sendTimeout="00:25:00"
                      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                      maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
                      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                      allowCookies="false">
                      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                            maxNameTableCharCount="2147483647" />
                      <reliableSession ordered="true" inactivityTimeout="00:25:00"
                            enabled="true" />
                      <security>
                            <transport>
                                  <extendedProtectionPolicy policyEnforcement="Never" />
                            </transport>
                      </security>
                </binding>
...

На стороне провайдера:

<wsHttpBinding>
    <binding name="wsHttpConfig" maxReceivedMessageSize="2147483647" receiveTimeout="00:25:00">
      <readerQuotas maxDepth="2147483647"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />
      <reliableSession enabled="true" ordered="true" />
    </binding>
  </wsHttpBinding>

...

<service name="Platform.WSLA.Impl.Services.Querying.QueryingService"
           behaviorConfiguration="Default.Behavior">

    <endpoint address="http://localhost:8004/Platform/wsla/querying/QueryingService"
              binding="wsHttpBinding"
              bindingConfiguration="wsHttpConfig"
              contract="Platform.WSLA.Contracts.Services.Querying.IQueryingService" />
    <endpoint address="mex"
              binding="mexHttpBinding"
              name="MetadataExchange"
              contract="IMetadataExchange" />

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8004/Platform/wsla/querying" />
      </baseAddresses>
    </host>

  </service>
0 голосов
/ 28 октября 2010

Это то же количество раз, прежде чем оно остановится? Возможно, вы достигли предела соединения?

Как создается ваша служба WCF?

Singleton, Session, PerCall?

Не могли бы вы опубликовать раздел конфигурации для вашей конечной точки клиента и сервера?

Работает ли он последовательно, если вы используете инструмент WcfClient?

...