문제

일부 웹 서비스 참조가 포함된 VS 2008의 WPF 응용 프로그램이 있습니다.다양한 이유로(최대 메시지 크기, 인증 방법) WPF 클라이언트의 app.config에서 서비스 바인딩에 대한 여러 설정을 수동으로 정의해야 합니다.

불행하게도 이는 프로젝트에서 서비스 참조를 업데이트할 때 여러 바인딩과 엔드포인트로 인해 혼란스러워진다는 것을 의미합니다.Visual Studio는 숫자 접미사(예: "Service1"을 "Service"의 중복으로)를 사용하여 새 바인딩 및 끝점을 생성하므로 프로젝트에서 서비스 참조당 바인딩이 하나만 있을 수 있으므로 잘못된 구성이 발생합니다.

이는 복제하기 쉽습니다. 솔루션에서 간단한 "Hello World" ASP.Net 웹 서비스 및 WPF 애플리케이션을 만들고 app.config 바인딩에서 maxBufferSize 및 maxReceivedMessageSize를 변경한 다음 서비스 참조를 업데이트하면 됩니다.

현재 우리는 참조를 업데이트한 후 app.config에서 체크아웃을 취소하여 이 문제를 해결하고 있지만 더 나은 방법이 있을 것이라고 생각하지 않을 수 없습니다!

또한 수동으로 변경해야 하는 설정은 다음과 같습니다.

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

그리고:

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

우리는 서비스 팩토리 클래스를 사용하므로 속성이 노출되지 않는 것처럼 보이더라도 이러한 설정을 프로그래밍 방식으로 설정할 수 있다면 작동할 것입니다.

도움이 되었습니까?

해결책

프로젝트에 적합한 설정을 가진 프록시 생성을 위해 svcutil을 사용하는 .Bat 파일을 만듭니다.꽤 쉽습니다.인터페이스가 변경될 때마다 Batfile을 클릭하여 새 프록시 파일을 생성하는 것은 쉽습니다.

그런 다음 배치는 나중에 자동화된 빌드에서 사용될 수 있습니다.그런 다음 app.config(또는 web.config)를 한 번만 설정하면 됩니다.우리는 일반적으로 개발, 테스트 프로덕션과 같은 다양한 환경에 대해 서로 다른 구성을 분리합니다.

예(줄 바꿈에 주의):

REM generate meta data
call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"

REM making sure the file is writable
attrib -r "MyServiceProxy.cs"

REM create new proxy file
call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll" 

:)

//승

다른 팁

생성된 엔드포인트를 변경하는 대신 필요한 구성으로 두 번째 엔드포인트와 바인딩 정의를 추가한 다음 코드에서 서비스 클라이언트 생성자에 새 엔드포인트의 이름을 입력하면 됩니다.

저는 Visual Studio의 "서비스 참조 추가" 기능을 사용하는 것보다 svcutil.exe를 직접 사용하는 것을 선호합니다. P 이것이 바로 WCF 프로젝트에서 수행하는 작업입니다.

귀하의 주장에 따르면 svcutil은 확실히 서비스 참조를 추가하고 업데이트하는 보다 진보된 방법입니다."마우스 오른쪽 버튼 클릭, 참조 업데이트"가 단일 단계로 작업하는 것과 너무 가까워지면 수동 작업이 훨씬 더 많아집니다.

참조 코드를 출력하기 위해 배치 파일이나 다른 것을 만들 수 있을 것 같습니다.그렇더라도 svcutil을 사용하여 서비스 코드를 수동으로 체크아웃하고 업데이트하는 것은 구성에서 체크아웃을 취소하는 것보다 더 많은 작업이 될 것입니다.

어떤 경우에도 조언을 주셔서 감사합니다.

우리가 하는 일은 svcutil.exe 유틸리티에 의해 자동 생성된 app.config 및 *.cs 파일을 (소스 제어에서) 확인한 다음 svcutil.exe를 실행하는 배치 파일을 실행하여 서비스 메타데이터를 검색하는 것입니다.완료되면 코드를 다시 컴파일하고 작동하는지 확인한 다음 업데이트된 app.config 및 *.cs 파일을 다시 확인합니다.Visual Studio에서 자주 버그가 발생하는 "서비스 참조 추가"를 사용하는 것보다 훨씬 더 안정적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top