2010-07-07 30 views
0

我正在使用Visual Studio 2010和C#編寫一個Web服務,需要通過滾動我自己的SoapExtension來解決的特殊處理。這個SoapExtension當然實現了ProcessMessage方法。My SoapExtension正在接收AfterSerialize消息兩次!

這很好,但由於某些原因,這個ProcessMessage被稱爲SoapServerMessage的每個階段的兩次(兩次,兩次),這是我的問題。任何幫助找出這是爲什麼,以及如何讓它只能被稱爲一次(一次),將不勝感激。

順便說一句:我發現在網上有其他人已經有類似的問題,如guy at mofeel.com,這表明他找到了解決方案here at experts-exchange.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); 
} 

...當我做一個調用我的Web方法,我得到一個日誌看起來像這樣:

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中配置了soap擴展,並且您已將自定義的SoapExtensionAttribute應用於Web方法。

這實質上會配置SoapExtension兩次,因此它將運行一次,因爲web.config中的配置和第二次因爲應用於Web方法的屬性。

2-您實際上已經在web.config中配置了兩次soap擴展。

+0

非常感謝。你是對的,我已經在web.config文件中應用了該屬性。 – 2010-07-07 21:13:50