2010-07-07 2 views
0

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

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

BTW: Я нашел другие в Интернете, которые сталкиваются с подобной проблемой, например, guy at mofeel.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- Вы настроили расширение мыла в файле web.config, и у вас есть пользовательский атрибут SoapExtensionAttribute, который вы применили к веб-методу.

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

2 Вы фактически сконфигурировали расширение мыла дважды в файле web.config.

+0

Спасибо, миллион. Вы правы, я использовал его в файле web.config, а также применил атрибут. –

Смежные вопросы