2009-12-09 16 views
0

在我正在使用的項目中,我們正在使用由SOAP公開的外部服務。在訪問由Visual Studio 2005生成的這些服務的代理類中,會員InnerChannel已公開,但Visual Studio 2008生成的代理類的情況並非如此。當從VS2005移動到VS2008時,SoapHttpClientProtocol中的InnerChannel替換

我試圖這樣做,但是當然因爲成員不存在而出現錯誤:

using (new OperationContextScope(proxy.InnerChannel)) { 
    OperationContext.Current.OutgoingMessageHeaders.Add(GetHeader()); 
    //... 
} 

回答

0

SOAP似乎已經在VS2008中完全重做了。

要做到在VS2008一樣,你需要創建一個實現的SoapExtension類:

public class classname : SoapExtension { 
    public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute) { 
    throw new NotImplementedException(); 
    } 

    public override object GetInitializer(Type serviceType) { 
    return null; 
    } 

    public override void Initialize(object initializer) {} 

    public override void ProcessMessage(SoapMessage message) { 
    switch (message.Stage) { 
     case SoapMessageStage.BeforeSerialize: 
     var header = GetHeader(); // Returns a class implementing SoapHeader 
     message.Headers.Add(header); 
     break; 
     case SoapMessageStage.AfterSerialize: 
     break; 
     case SoapMessageStage.BeforeDeserialize: 
     break; 
     case SoapMessageStage.AfterDeserialize: 
     break; 
    } 
    } 
} 

並在您的配置文件中註冊該類:

.... 
    <webServices> 
    <soapExtensionTypes> 
     <add type="namespace.classname, namespace" priority="1" group="Low"/> 
    </soapExtensionTypes> 
    </webServices> 
</system.web> 
相關問題