Первый вызов веб-служб Dynamics GP 2010 занимает более 10 секунд - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть веб-сайт, который взаимодействует с веб-службами .NET 4 WCF.Эта служба WCF подключается к веб-службам Dynamics GP на удаленном сервере.Обе веб-службы размещаются самостоятельно (без IIS).

Первый вызов GP занимает около 12 секунд!Звонки сразу после (даже в другом запросе WCF) составляют около 100 мс, но если я подожду минуту или две между вызовами, это займет еще 10 секунд ...

Что может бытьпричина проблемы, как я могу ее решить?

Я сгенерировал прокси-сервер, используя SvcUtil и VS 2010 Add Service Reference, но получил ту же проблему с обоими.Прокси-файл Dynamics GP занимает 3 МБ, не знаю, связано ли это.

Я запустил Wireshark для анализа сетевого трафика, и реальный поток запросов-ответов tcp, похоже, занимает меньше секунды.Кажется, что перед отправкой запроса происходит что-то, что занимает 10 секунд.

Вот код, используемый:

Context context = new Context();
CompanyKey companyKey = new CompanyKey();
companyKey.Id = -1;
context.OrganizationKey = companyKey;

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();

_proxy = new DynamicsGPClient();
_proxy.ClientCredentials.Windows.ClientCredential.Domain = Domain;
_proxy.ClientCredentials.Windows.ClientCredential.UserName = Username;
_proxy.ClientCredentials.Windows.ClientCredential.Password = Password;

long openingMs = sw.ElapsedMilliseconds;
CustomerCriteria customerCriteria = new CustomerCriteria();
CustomerSummary[] gpCustomers = _proxy.GetCustomerList(customerCriteria, context);
long fctCallMs = sw.ElapsedMilliseconds;
...
if (_proxy != null && _proxy.State != System.ServiceModel.CommunicationState.Faulted) {
    _proxy.Close();
}

Вот файл app.config:

<system.serviceModel>
   <bindings>
      <wsHttpBinding>
         <binding name="GPWebService" closeTimeout="00:01:00" openTimeout="00:01:00"
                  receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" 
                  transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
                  maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
                  messageEncoding="Text" textEncoding="utf-8" 
                  useDefaultWebProxy="true" allowCookies="false">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
                          maxBytesPerRead="4096" maxNameTableCharCount="2147483647"/>
            <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
            <security mode="Message">
               <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
               <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
            </security>
         </binding>
      </wsHttpBinding>
   </bindings>
   <client>
      <endpoint address="http://192.168.x.y:48620/Dynamics/GPService/GPService" binding="wsHttpBinding"
                bindingConfiguration="GPWebService"
                contract="DynamicsGpService.DynamicsGP" name="GPWebService">
         <identity>
            <userPrincipalName value="DEV\gpeconnect"/>
         </identity>
      </endpoint>
   </client>
</system.serviceModel>

1 Ответ

2 голосов
/ 21 ноября 2011

Самостоятельный ответ

Для сообщества вот что я узнал (но я не могу объяснить почему , поэтому не спрашивайте!;))

В app.config клиента значение useDefaultWebProxy="true" должно быть установлено на false ... это сделало очень простой Hello World проход веб-службы с 7 секунд до ~ 100 мс напервый вызов.

В файле app.config клиента полное удаление раздела identity > userPrincipalName привело к тому, что первый вызов WCF прошел с> 10 секунд до ~ 1 секунды!

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