Странная ошибка "Файл '/DefaultWsdlHelpGenerator.aspx' не существует" при переназначении WebService HttpHandler - PullRequest
1 голос
/ 15 августа 2011

У меня есть динамический сайт, управляемый CMS (пользовательский прокат, я знаю, колеса и т. Д., Но не мое решение!), Который использует HttpModule для направления контента.Я обнаружил, что ресурсы .asmx не работают.После исследования я выяснил, что это произошло потому, что я по существу переопределил обработчик, убрав запрос из всего конвейера.

Итак, я теперь выясняю, существует ли ресурс и является ли он файлом .asmx, и обрабатываюсоответственно.Я думаю, что нужно создать WebServiceHandler, используя WebServiceHandlerFactory, а затем переназначить его.

Это прекрасно работает с строкой запроса? Wsdl, но запрашивает сам URI, и вы получите (в точке, обозначенной звездочками):

Исключение System.InvalidOperationException не было обработано кодом пользователя
Сообщение = Не удалось обработать запрос.[snip] InnerException: System.InvalidOperationException Message = Невозможно обработать запрос.Source = System.Web.Services InnerException: System.Web.HttpException Message = Файл '/DefaultWsdlHelpGenerator.aspx' не существует.

Обратите внимание на окончательное InnerException.Похоже, что этот поток указывает на испорченную установку .NET Framework, но этот файл присутствует в папке конфигурации 4.0.Я подозреваю ошибку с моей стороны.Я неправильно переназначаю?

public class xxxVirtualContentHttpModule : xxxHttpModule
{
        protected override void OnBeginRequest(IxxxContextProvider cmsContext, HttpContext httpContext)
        {
            string resolvePath = httpContext.Request.Url.AbsolutePath;

            // is path a physical file?
            IRootPathResolver rootPathResolver=new HttpServerRootPathResolver(httpContext.Server);
            string serverPath = rootPathResolver.ResolveRoot("~" + resolvePath);

            if (File.Exists(serverPath))
            {
                if (Path.GetExtension(serverPath).Equals(".asmx", StringComparison.CurrentCultureIgnoreCase))
                {
                    WebServiceHandlerFactory webServiceHandlerFactory = new WebServiceHandlerFactory();
                    IHttpHandler webServiceHttpHandler = webServiceHandlerFactory.GetHandler(httpContext, "Get", resolvePath, serverPath); // *****

                    httpContext.RemapHandler(webServiceHttpHandler);
                }
            }

        }

Обновление

Я удалил все ссылки на HttpModules, и эта проблема все еще возникает, то есть она не имеет ничего общего с частью системы CMS.

1 Ответ

2 голосов
/ 16 августа 2011

Решил это.

Кажется, что в web.config добавлена ​​новая конфигурация:

<system.web>
    <webServices>
        <wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx" />
    </webServices>
</system.web>

Удалено это, и все работает.

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