Создание веб-сервиса без файла ASMX?

Команда tracert произвольно занимает около 50-90 секунд, в зависимости от ISP, IIG и прыжков с сервера . Я создал скрипт, который измеряет время, затраченное на выполнение этой команды, и использует это число для вычисления псевдослучайного числа .

@echo off
cls
color 0a
title TimeRandom
set reduct=1
set increase=1
set div=2
setlocal

:notice
cls
echo TimeRandom uses tracert on some specific domain as a source of randomness.
echo.
echo Try to set the most furthest server from your location or the server
echo with the highest ping.
echo.
echo For generation of numbers below or equal to 60, You should make sure
echo the tracert command runs for at least 70 seconds or more for true randomness.
echo.
echo This program automatically adjusts itself to high maxbound numbers and or low valuerange
echo.
echo Boundaries ranging from 1-60 runtime : 75-90 seconds (est.)
echo Boundaries ranging from 61-1073741824 runtime : 90 seconds (est.)
echo Bizarre low valuerange boundaries : 90 seconds (est.)
echo.
echo The code author does not guarantee that this code generate true random numbers. Use with caution.
echo.
echo The code author should not be responsible for the misuse of this code against all laws and treaties.
echo.
set /p ackn=Continue(Y/N):

if %ackn%==Y goto :setbound
if %ackn%==y goto :setbound 
goto :EOF  


:setbound
cls
set /p lowbound=InputLowbound:
set /p maxbound=InputMaxbound:
if %maxbound% LEQ %lowbound% goto :EOF
goto :init

:init
cls
call :GetUnixTime utimebefore
tracert www.roblox.com
call :GetUnixTime utimeafter
set /a deltaubm=%utimeafter%-%utimebefore%
if %maxbound% LEQ 60 set /a deltau=%deltaubm% && goto :chkfn
goto :initincr

:initincr
cls
set /a med=(%lowbound%+%maxbound%)/2
set /a deltaubm=%deltaubm%*%deltaubm%
if %deltaubm% GTR %maxbound% goto :reductexpo
goto :initincr

:reductexpo
cls
set /a deltaubm=%deltaubm%/%div%
if %deltaubm% LEQ %maxbound% set deltau=%deltaubm% && goto :chkfn
goto :reductexpo

:chkfn
if %deltau% GTR %maxbound% goto :reductloop
if %deltau% EQU %maxbound% set varnum=%deltau% && goto :result
if %deltau% GTR %lowbound% set varnum=%deltau% && goto :result
if %deltau% EQU %lowbound% set varnum=%deltau% && goto :result
if %deltau% LSS %lowbound% goto :incrloop

:reductloop
cls
set /a deltau=%deltau%-%reduct%
set /a reduct=%reduct%+1
if %deltau% GTR %maxbound% goto :reductloop
if %deltau% EQU %maxbound% set varnum=%deltau% && goto :result
if %deltau% GTR %lowbound% set varnum=%deltau% && goto :result
if %deltau% EQU %lowbound% set varnum=%deltau% && goto :result
if %deltau% LSS %lowbound% goto :incrloop

:incrloop
cls
set /a deltau=%deltau%+%increase%
set /a increase=%increase%+1
if %deltau% GTR %maxbound% goto :reductloop
if %deltau% EQU %maxbound% set varnum=%deltau% && goto :result
if %deltau% GTR %lowbound% set varnum=%deltau% && goto :result
if %deltau% EQU %lowbound% set varnum=%deltau% && goto :result
if %deltau% LSS %lowbound% goto :incrloop

:result
cls
echo Random Result
echo.
echo %varnum%
echo.
pause
goto :setbound


:GetUnixTime
setlocal enableextensions
for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do (
    set %%x)
set /a z=(14-100%Month%%%100)/12, y=10000%Year%%%10000-z
set /a ut=y*365+y/4-y/100+y/400+(153*(100%Month%%%100+12*z-3)+2)/5+Day-719469
set /a ut=ut*86400+100%Hour%%%100*3600+100%Minute%%%100*60+100%Second%%%100
endlocal & set "%1=%ut%" & goto :EOF

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

6
задан Chris Roberts 24 January 2009 в 14:13
поделиться

4 ответа

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

<configuration>
   <system.web>
      <httpHandlers>
         <add verb="*" path="*WebService.asmx" type="MyHandler.WebServiceHandler, MyHandler" />
      </httpHandlers>
   </system.web>
</configuration>

Править: Я был близок, см. эту статью (в VB хотя): http://www.codeproject.com/KB/aspnet/wsinaclasslibrary.aspx

5
ответ дан 17 December 2019 в 18:20
поделиться

Я знаю, что это очень старый вопрос, но на него не было дано правильного ответа, так что вот он:

Каждый *. ASMX запрос по умолчанию обрабатывается System.Web.Services.Protocols.WebServiceHandlerFactory.

Заглядывая в исходный код этого класса в . NET рефлектор, можно иметь веб-сервис без ASMX файла, но необходимо вызвать внутренний метод CoreGetHandler через отражение.

Следующий метод возьмет ваш веб-сервис и вернет его IHttpHandler.

public IHttpHandler GetHttpHandlerForWebService(WebService webService, HttpContext context)
{
    var webServiceType = webService.GetType();
    var wshf = new System.Web.Services.Protocols.WebServiceHandlerFactory();
    var coreGetHandler = wshf.GetType().GetMethod("CoreGetHandler");
    var httpHandler = (IHttpHandler)coreGetHandler.Invoke(wshf, new object[] { webServiceType, context, context.Request, context.Response });
    return httpHandler;
}

После того как httphandler будет обработан, достаточно вызвать

httpHandler.ProcessRequest(context)

Done. Никакого ASMX и никаких записей web.config.

3
ответ дан 17 December 2019 в 18:20
поделиться

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

-7
ответ дан 17 December 2019 в 18:20
поделиться

Рассмотрите методы страницы попытки (см. это сообщение в блоге). Все, что необходимо сделать, добавляют, что веб-метод приписывает статическому методу в коде aspx позади. Затем получите доступ к объекту PageMethod из своего клиентского кода (JavaScript). Никакие файлы ASMX не необходимы.Надеюсь, это поможет.

0
ответ дан 17 December 2019 в 18:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: