Как проследить Запросы к веб-сервису ScriptService?

Ошибка ответа от демона: ошибка rpc: code = 2 desc = «Ошибка времени выполнения oci: ошибка формата exec»

В моем случае я получил эту ошибку при попытке установить докер на 32-битный ArchLinux (малиновый пи 2). Вместо этого я использовал HyperioOS , и он стал намного плавнее и намного быстрее устанавливался. Но, в конце концов, большинство образов докеров не совместимы с 32-битными архитектурами, и они описывают это как возможную причину для получения этой ошибки.

Здесь мы запускаем Docker на Raspberry Pi. Таким образом, архитектура процессора здесь ARM, а не x86 / x64 от Intel или AMD. Таким образом, используемые вами приложения на основе Docker должны быть упакованы специально для архитектуры ARM! Приложения на базе Docker, упакованные для x86 / x64, не будут работать и приведут к ошибке

7
задан jrummell 22 June 2009 в 21:55
поделиться

3 ответа

Я нашел решение. Используя IHttpModule, я могу регистрировать запросы от чего угодно (SOAP, JSON, формы и т. Д.). В приведенной ниже реализации я решил регистрировать все запросы .asmx и .ashx. Это заменяет LoggingSoapExtension из вопроса.

public class ServiceLogModule : IHttpModule
{
    private HttpApplication _application;
    private bool _isWebService;
    private int _requestId;
    private string _actionUrl;

    #region IHttpModule Members

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        _application = context;
        _application.BeginRequest += ContextBeginRequest;
        _application.PreRequestHandlerExecute += ContextPreRequestHandlerExecute;
        _application.PreSendRequestContent += ContextPreSendRequestContent;
    }

    #endregion

    private void ContextPreRequestHandlerExecute(object sender, EventArgs e)
    {
        _application.Response.Filter = new CapturedStream(_application.Response.Filter,
                                                          _application.Response.ContentEncoding);
    }

    private void ContextBeginRequest(object sender, EventArgs e)
    {
        string ext = VirtualPathUtility.GetExtension(_application.Request.FilePath).ToLower();
        _isWebService = ext == ".asmx" || ext == ".ashx";

        if (_isWebService)
        {
            ITraceLog traceLog = TraceLogFactory.Create();
            _actionUrl = _application.Request.Url.PathAndQuery;

            StreamReader reader = new StreamReader(_application.Request.InputStream);
            string message = reader.ReadToEnd();
            _application.Request.InputStream.Position = 0;

            _requestId = traceLog.LogRequest(_actionUrl, message);
        }
    }

    private void ContextPreSendRequestContent(object sender, EventArgs e)
    {
        if (_isWebService)
        {
            CapturedStream stream = _application.Response.Filter as CapturedStream;
            if (stream != null)
            {
                ITraceLog traceLog = TraceLogFactory.Create();
                traceLog.LogResponse(_actionUrl, stream.StreamContent, _requestId);
            }
        }
    }
}

Я много позаимствовал из Захват HTML, сгенерированного из ASP.NET .

2
ответ дан 7 December 2019 в 16:45
поделиться

Это может быть потому, что вы запрашиваете результаты Json вместо XML через ваш веб-сервис (dataType: "json"). Итак, атрибут ScriptService активируется, но вы не отправляете сообщения SOAP.

Вы можете изменить dataType на xml и посмотреть, работает ли это.

http://docs.jquery.com/Ajax/jQuery.ajax #options

Другой вариант ведения журнала - это Log4Net. Для вас это могло бы быть намного более универсальным.

1
ответ дан 7 December 2019 в 16:45
поделиться

Fiddler (в первую очередь для IE, но теперь для firefox) или Firebug (для firefox) - бесценные инструменты для отслеживания ваших клиентских запросов и ответов.

0
ответ дан 7 December 2019 в 16:45
поделиться
Другие вопросы по тегам:

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