2009-12-09 5 views
0

프로젝트에서 SOAP과 관련된 외부 서비스를 사용하고 있습니다. Visual Studio 2005에서 생성 된이 서비스에 액세스하기위한 프록시 클래스에서 멤버 InnerChannel이 노출되었지만 Visual Studio 2008에서 생성 된 프록시 클래스는 그렇지 않습니다.SoapHttpClientProtocol에서 InnerChannel을 대체 할 때 VS2005에서 VS2008로 바뀔 때

회원이 존재하지 않으므로 과정에 오류가 발생합니다.

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

답변

0

SOAP이 VS2008에서 완전히 다시 처리 된 것처럼 보입니다.

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> 

는 SoapExtension를 구현하는 클래스를 만들 필요가 VS2008에서 같은 수행
관련 문제