Проблемы масштабируемости, когда мы вызываем веб-сервисы, написанные на .NET, используя asp / vbscript - PullRequest
1 голос
/ 24 апреля 2009

В настоящее время мы вызываем веб-сервисы на нашем сервере приложений через наш веб-сервер, используя asp / vbscript. Это очень хорошо работает при низкой нагрузке. Однако во время высокой нагрузки выполнение запроса может занять до 25 секунд, как показано ниже:

Public Function GetValidLogon(storeKey, username)
    Dim req
    Set req = CreateObject("Microsoft.XMLHTTP")

    Dim soapReq
    soapReq = "<?xml version=""1.0"" encoding=""utf-8""?> " + _
                "<soap:Envelope " + _
                    "xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" " + _
                    "xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " + _
                    "xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> " + _
                    "<soap:Body> " + _
                        "<GetValidLogon xmlns=""" + namespace + """> " + _ 
                            "<storeKey>" + _
                                CStr(storeKey) + _
                            "</storeKey>" + _
                            "<username>" + _
                                CStr(username) + _
                            "</username>" + _
                        "</GetValidLogon> " + _
                    "</soap:Body> " + _
                "</soap:Envelope>"

    req.open "POST", Me.serviceAddress, False
    req.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    req.setRequestHeader "SOAPAction", Me.serviceNamespace + "GetValidLogon"
    req.send soapReq

    Set GetValidLogon = SOAPResponseTo_GetValidLogonOutput(req.responseText)
End Function

Как вы думаете, в чем проблема? Это код, который мы используем для вызова веб-служб (см. Выше), или это просто тот факт, что мы используем vbscript / asp для вызова веб-служб? Это могут быть какие-то настройки в IIS ...?

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

Ответы [ 4 ]

1 голос
/ 29 апреля 2009

Никогда не используйте

CreateObject("Microsoft.XMLHTTP")

в приложениях на стороне сервера .. используйте

CreateObject("MSXML2.ServerXMLHTTP")

вместо.

0 голосов
/ 24 апреля 2009

Где хранятся учетные данные пользователя на сервере - в вашем приложении, в базе данных или в Active Directory? Возможно, проблема не в вашем приложении, а в вашем подключении к AD.

0 голосов
/ 24 апреля 2009

Есть ли проблема производительности в вашей среде разработки при нагрузочном тестировании?

Если это так, то я предлагаю вам создать тестовый скрипт, поместив приведенный выше код на тестовую страницу ASP. Пусть страница принимает два параметра строки запроса: «n» и «m». Зацикливайтесь «n» раз подряд с задержкой «m» в миллисекундах между каждым вызовом, а затем смотрите, что происходит. Может быть, даже посмотреть, что происходит, когда вы звоните на одну и ту же страницу из нескольких запросов.

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

При необходимости вы можете перейти к профилированию веб-службы. См. Инструменты профилировщика для .NET . Проблема может быть где угодно, даже в базе данных, и эти инструменты помогут вам сузить эту проблему.

0 голосов
/ 24 апреля 2009

Мне было бы любопытно посмотреть, ограничивает ли сервер / код / ​​IIS только N одновременных подключений к веб-сервисам. Это приведет к тому, что другие запросы будут поставлены в очередь и заблокированы, пока остальные не будут завершены.

...