Время ожидания службы WCF - PullRequest
       0

Время ожидания службы WCF

3 голосов
/ 21 января 2011

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

ProgrammingMaster_ServiceClient aClient = new ProgrammingMaster_ServiceClient();
aClient.Endpoint.Address = new EndpointAddress("http://localhost:8081/ProgrammingMaster/PM_Service");
aClient.BeginProgrammingSession(0x01);
aClient.Close();

Код, который я использую для использования сервиса. ProgrammingMaster_SErviceClient создается программой svcutil.exe.

Я получаю ту же проблему, если уберу строку

aClient.Endpoint.Address = new EndpointAddress("http://localhost:8081/ProgrammingMaster/PM_Service");

Я не совсем уверен, где я должен искать, чтобы начать отладку.

вызываемая служба отправляет сообщение в другую сеть. Когда я звоню через wcfstorm, я вижу сообщение, отправленное службой. так что я знаю, что сервис работает правильно.

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

Редактировать: после истечения времени ожидания (я перехватываю и регистрирую исключение) служба отправляет свое сообщение в другую сеть, как и положено.

Редактировать 2: Надеюсь, это лучшее объяснение.

Итак, у меня есть плагин, который предоставляет веб-сервис и использует другой веб-сервис. Таким образом, плагин в основном подключается к объекту в специальной сети, а затем передает значения свойств этого объекта, используя веб-сервис.

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

Нет проблем с таймаутом, когда плагин отправляет обновления в приложение. Я получаю сообщение об ошибке тайм-аута, когда приложение использует веб-сервис для отправки команды удаленному объекту через плагин. После истечения времени ожидания команда выполняется. Таким образом, веб-сервис вызывается успешно. Я думаю, я просто не получаю ответ?

Редактировать 3: Вот мой файл конфигурации приложения. Я сократил время отправки до 00:00:01, чтобы ожидание не было таким длинным, но мне бы очень хотелось его исправить, чтобы не приходилось каждый раз превышать время ожидания.

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IProgrammingMaster_Service" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:00:01" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="">
              <extendedProtectionPolicy policyEnforcement="Never"/>
            </transport>
            <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8081/ProgrammingMaster/PM_Service" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IProgrammingMaster_Service" contract="IProgrammingMaster_Service" name="WSHttpBinding_IProgrammingMaster_Service">
        <identity>
          <userPrincipalName value="mzjkk7@nam.corp.gm.com"/>
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

Ответы [ 3 ]

4 голосов
/ 25 января 2011

Ох ...

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

Важный вопрос: клиент и служба работают в одном потоке?

Если это так, то это, вероятно, ваша проблема. Попробуйте раскрутить сервис в отдельном потоке и посмотреть, решит ли это проблему.

1 голос
/ 25 января 2011

Включите встроенные функции отладки и ведения журнала WCF:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

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

0 голосов
/ 21 января 2011

Вы пробовали его с выключенным брандмауэром, чтобы посмотреть, может ли это быть причиной?

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