2009-11-17 3 views
4

설정Visual Studio 서비스 참조 용 사용자 지정 템플릿?

Visual Studio에서 웹 서비스를 사용하려고합니다. WSDL 문서에서 가리키는 서비스 참조를 추가했습니다. 나는 챔피언처럼 작동하는 생성 된 코드를 얻는다.

문제점 서비스 참조 대화 상자에서

, 나는대로 "내부"선택 "생성 된 클래스에 대한 액세스 수준." WhateverSoapClient 클래스 앞에 "internal"키워드를 넣은 것처럼 보입니다. 그루비. 그러나 생성 된 모델 클래스 앞에는 "공용 부분"키워드가옵니다. "부분적인"부분은 괜찮지 만 (원하는 경우라도) 일반인에게는 적합하지 않습니다. 나는이 클래스들을 내부적으로 원한다.

해결책은 무엇입니까?

분명히 Visual Studio (svcutil.exe?)는 Reference.cs를 생성하기 위해 템플릿을 사용하고 있습니다. 맞습니까? 해당 템플릿을 변경하거나 대안을 지정할 수있는 방법이 있습니까? 아니면 잘못된 나무를 짖고 있습니까?

감사합니다.

나는 이것에 관해 매우 새로운 것이므로, 나는 그 질문을 나쁘게 표현했을지도 모른다.


편집 : Tuzo의 코멘트에 대한 응답으로, 나는 다음에 비주얼 스튜디오를 연결하고있어 :

https://sebomarketing.worldsecuresystems.com/CatalystWebService/CatalystEcommerceWebservice.asmx?WSDL.

VS는 Catalogue_Retrieve()라는 메서드가있는 CatalystEcommerceWebserviceSoapClient라는 내부 클래스를 생성합니다. Catalogue_Retrieve()는 Catalog 객체를 반환하고 Visual Studio는 Catalog 클래스를 "public partial"로 생성합니다. 나는 그것을 내부적으로 원한다. 여기

가 생성지고 무엇의 일부 조각입니다
internal partial class CatalystEcommerceWebsierviceSoapClient : System.ServiceModel.ClientBase<BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap>, BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap { 
    public BcApi.EcommerceApi.Catalogue Catalogue_Retrieve(...) { 
     // ... 
    } 
} 

public partial class Catalogue : object, System.ComponentModel.INotifyPropertyChanged { 
    // ... 
} 

그리고 제이미에 응답

, 나는 SubSonic에 T4 템플릿 덕분에 익숙 해요. 그래서 저는 이미이 문제에 대한 T4 관련 대답을 조금 풀었습니다. 그래도 조금 더 파고들 수 있습니다. 팁 고마워.

+4

Visual Studio는 코드 생성의 많은 부분 (아마도 모두?)에 대해 "T4 템플릿"이라는 시스템을 사용합니다. 아마도 그것은 Google 검색에 포함 할 유용한 용어 일 수 있습니다. –

+0

서비스 참조를 추가하고 액세스 수준을 내부로 선택하면 생성 된 파일에 "공용 부분"이 표시되지 않습니다. 내 ServiceClient 및 내 DataContract 유형 모두 "내부 부분"으로 표시됩니다. 어쩌면 샘플 코드를 게시 할 수 있다면 도움이 될까요? –

답변

2

당신은 어떤을 포함하지 않았다 속성은 공용 클래스를 장식하지만, 그랬다면 나는 속성 중 하나가되었을 것 같은데요 : 그렇다면

[System.Xml.Serialization.XmlTypeAttribute(Namespace="blahblahblah")] 

, 그때는 svcutil 이러한 클래스 내부 확인을 거부하고있는 이유는 때문이다 클래스 데이터가 b 인 방법의 제한 직렬화; XmlSerializer는 클래스가 공개되어야합니다.

이와 같이 svcutil이 내부적으로 만들 수있는 유일한 것은 서비스 인터페이스와 서비스 구현 클래스입니다.

이러한 클래스를 모두 내부 클래스로 생성 한 사용자 정의 T4 템플릿을 만들더라도 서비스와 더 이상 통신 할 수 없다는 것을 알게 될 것입니다.

-1

서비스 참조를 업데이트하지 않으려면이 파일을 수동으로 편집 할 수 있습니다. 예, 업데이트하면 변경 사항이 손실되지만 자동으로 업데이트되지 않으므로이 무작위로 발생하는 것에 대해 걱정할 필요가 없습니다.당신이 (내가) 우리의 데이터 계약 클래스에서이 문제를보고하는 이유

+3

-1 : Graham, 참여하게되어 기쁘지 만 생성 된 코드를 편집하도록 누군가에게 알리는 것을 볼 수는 없습니다. 부주의로 "업데이트 서비스 참조"를 사용하는 사람은 귀하가 말하는 사람이 아닙니다. 생성 된 코드가 편집되었음을 알 수없는 빈약 한 개발자가 될 것입니다. –

관련 문제