Мой SoapExtension получает сообщение AfterSerialize дважды! - PullRequest
0 голосов
/ 07 июля 2010

Я использую Visual Studio 2010 и C # для написания веб-службы, которая требует особой обработки, которую я решаю путем развертывания собственного SoapExtension. Это SoapExtension, конечно, реализует метод ProcessMessage .

Это нормально, но по какой-то причине ProcessMessage вызывается дважды (два, 2 раза) для каждой из стадий SoapServerMessage, и это моя проблема. Буду очень признателен за любую помощь в выяснении, почему это так и как я могу сделать так, чтобы он вызывался только один раз (один, один раз).

Кстати: я нашел в Интернете других, у которых была похожая проблема, например, этот парень на mofeel.com , который указывает, что он нашел решение здесь, на бирже экспертов. com но я не буду выдавать свою кредитную карту за решение. Это принцип. Может кто-нибудь помочь мне, пожалуйста?

Мой ProcessMessage метод выглядит следующим образом:

public override void ProcessMessage(SoapMessage message)
{
    if (message is SoapServerMessage)
    {
        LogFile.WriteLogString(0, "-------------------");
        LogFile.WriteLogString(0, "message.Type:" + message.GetType().ToString());
        LogFile.WriteLogString(0, "message.Stage:" + message.Stage);
        LogFile.WriteLogString(0, "message.Stream.Length:" + message.Stream.Length);
        LogFile.WriteLogString(0, "message.Stream.Position:" + message.Stream.Position);
        LogFile.WriteLogString(0, "message.Exception:" + message.Exception);
        ProcessServerMessage(message);
    }
    else ProcessClientMessage(message);
}

... и когда я делаю один вызов моего веб-метода, я получаю журнал, похожий на этот:

7.7.2010 17:40:25: -------- Log file opened --------
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:BeforeDeserialize
7.7.2010 17:40:27: [0] message.Stream.Length:0
7.7.2010 17:40:27: [0] message.Stream.Position:0
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:BeforeDeserialize
7.7.2010 17:40:27: [0] message.Stream.Length:0
7.7.2010 17:40:27: [0] message.Stream.Position:0
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:AfterDeserialize
7.7.2010 17:40:27: [0] message.Stream.Length:330
7.7.2010 17:40:27: [0] message.Stream.Position:330
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:AfterDeserialize
7.7.2010 17:40:27: [0] message.Stream.Length:330
7.7.2010 17:40:27: [0] message.Stream.Position:330
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:BeforeSerialize
7.7.2010 17:40:27: [0] message.Stream.Length:0
7.7.2010 17:40:27: [0] message.Stream.Position:0
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:BeforeSerialize
7.7.2010 17:40:27: [0] message.Stream.Length:0
7.7.2010 17:40:27: [0] message.Stream.Position:0
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:AfterSerialize
7.7.2010 17:40:27: [0] message.Stream.Length:480
7.7.2010 17:40:27: [0] message.Stream.Position:480
7.7.2010 17:40:27: [0] message.Exception:
7.7.2010 17:40:27: [0] -------------------
7.7.2010 17:40:27: [0] message.Type:System.Web.Services.Protocols.SoapServerMessage
7.7.2010 17:40:27: [0] message.Stage:AfterSerialize
7.7.2010 17:40:27: [0] message.Stream.Length:480
7.7.2010 17:40:27: [0] message.Stream.Position:480
7.7.2010 17:40:27: [0] message.Exception:

Обратите внимание, как каждый этап сообщения вызывается дважды?!?!?

1 Ответ

1 голос
/ 07 июля 2010

Я вижу две возможности здесь.

1- Вы настроили расширение soap в файле web.config, и у вас есть собственный атрибут SoapExtensionAttribute, который вы применили к веб-методу.

Это будетпо существу настройте SoapExtension дважды, и поэтому он будет запускаться один раз из-за конфигурации в web.config и второй раз из-за атрибута, примененного к веб-методу.

2 - вы фактически настроили расширение soap дваждыв web.config.

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