2016-06-08 3 views
1

웹 서비스를 통해 데이터를 보내고 받기 위해 제 3의 WSDL (서비스 참조를 통해)을 내 콘솔 응용 프로그램 프로젝트로 가져 왔습니다. 이 기능을 적절하게 사용하려면 웹 서비스에 연결된 Reference.cs 파일에 코드를 추가해야했습니다. 이 작업이 진행되는 동안 WSDL을 업데이트하고 해당 서비스 참조를 다시 가져 오거나 생성하면 해당 해결 코드가 사라집니다.생성 된 부분 클래스 재정의

이 문제를 해결하기 위해 필요한 코드 변경 내용을 프로젝트 내에 저장된 외부 텍스트 파일에 저장했습니다.

서비스 레퍼런스가 아닌 별도의 클래스에 이러한 변경 사항을 기록 할 수있는 방법을 알고 있지만 여전히 서비스 레퍼런스에서 참조 할 수 있다면 궁금합니다. "올바른" 웹 서비스에서 보내고 받기 위해 필요한 코드.

나는 생성 된 코드에서 자신의 .cs 파일로 분리하고 서비스 참조에서 사용하는 namespace을 참조한 후 두 클래스 (생성 된 코드에는 포함되지 않음)를 참조 할 수 있습니다. 내가하고 싶은 무엇

, 가능하면 않습니다 :


전체 목표 :
서비스 참조, 그 방법으로 타사 WSDL을 가져 오기에 의해 생성 된 코드에 사용자 정의 코드 추가 WSDL은 제 3 자에 의해 업데이트되며, 다른 개발자는 서비스 참조의 Reference.cs 파일을 반드시 기억하고 특정 코드를 대체/추가해야한다는 것을 기억하지 않아도됩니다. (아래의 발췌문 # 1 참조) 사용자 정의 버전으로 생성 된 partial class의 기존 속성 및 관련 분야를 교체

  1. :

    내가 할 수 있어야합니다,이 목표를 달성하기 위해.

  2. 생성 된 기존 partial class을 속성 정의가 다르며 속성/필드 정의가 약간 다른 클래스의 사용자 정의 버전으로 바꿉니다.

니펫 # 1

다음 바꾸기 :

: 속성이 버전의

private byte[] bulkExchangeFileField; 

[System.Xml.Serialization.XmlElementAttribute(Namespace = "urn:us:gov:treasury:irs:common", DataType = "base64Binary", Order = 0)] 
public byte[] BulkExchangeFile 
{ 
    get { return this.bulkExchangeFileField; } 
    set 
     { 
      this.bulkExchangeFileField = value; 
      this.RaisePropertyChanged("BulkExchangeFile"); 
     } 
    } 

을/한 번 일 필드는 내가 생성 된 코드를 변경

private BulkExchangeFileType bulkExchangeFileField; 

[System.Xml.Serialization.XmlElementAttribute(Namespace = "urn:us:gov:treasury:irs:common", Order = 0)] 
public BulkExchangeFileType BulkExchangeFile 
{ 
    get { return this.bulkExchangeFileField; } 
    set 
    { 
     this.bulkExchangeFileField = value; 
      this.RaisePropertyChanged("BulkExchangeFile"); 
    } 
} 

답변

0

확장 클래스를 사용하거나 삽입 클래스의 속성을 오버로드하면 코드가 대체되지 않습니다. public으로 선언하기 전에 public으로 선언해야하는 속성을 오버로드하려면 new public BulkExchangeFileType BulkExchangeFile이므로 객체를 사용할 때 웹 서비스에 정의 된 객체 대신 해당 객체를 호출합니다.

확장 방법 만들기 https://msdn.microsoft.com/library/bb383977.aspx

class Program 
{ 
    static void Main(string[] args) 
    { 
     InheredClass test = new InheredClass(); // Do this 
     BaseClass test2 = new InheredClass(); // don't do this 

     Console.WriteLine(test.MyProperty.GetType()); 
     Console.WriteLine(test2.MyProperty.GetType()); 
     Console.Read(); 
    } 


    class BaseClass 
    { 
     public int MyProperty { get; set; } 
    } 

    class InheredClass : BaseClass 
    { 
     new public decimal MyProperty { get; set; } 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 나는 당신이 속성의 오버로딩에 대해 무엇을 말하고 있는지 완전히 이해하고 있는지 확신 할 수 없다. 샘플/샘플을 제공하기 위해 응답을 편집 할 수 있습니까? 하나의 프로퍼티를 다른 타입의 프로퍼티로 대체하고 싶습니다 : 하나는 'BulkExchangeFileType'으로 정의 된'byte [] '로 정의 된 프로퍼티입니다. 나는 내가 찾고있는 것을 더 구체적으로 내 포스트를 업데이트했다. – Russ