2011-01-21 2 views
3

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

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="[email protected]"/> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 
<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 
</configuration> 
+1

Вы пытались использовать Fiddler, чтобы узнать, что происходит? – Gabe

+0

no Я никогда не слышал об этом раньше. Я сейчас посмотрю на это спасибо. – scott

+0

@Gabe - Я ничего не вижу в скрипаче, хотя я могу просто использовать его неправильно. – scott

ответ

4

О ...

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

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

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

+0

Я не думал, что попробую. Благодарю. – scott

+0

Это сработало. Спасибо. Я не могу дать щедрость до завтра. – scott

+0

Хорошая сделка - я рад, что это сработало! – RQDQ

0

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

+0

Это всегда выключено. – scott

1

Включите встроенный в WCF функций отладки/лесозаготовительных:

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

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

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