2011-07-29 2 views
1

이것은 정말 어리석은 질문 일 수 있지만 해결 방법을 찾을 수 없었습니다. SiteMinder 인증을 사용하는 사이트에서 호스팅되는 WCF 서비스가 있습니다. 인증은 클라이언트 요청의 쿠키에 의존합니다. 문제는 svcutil을 사용하여 프록시 클래스를 생성하려고 할 때 svcutill이 메타 데이터를 가져 오려고 시도 할 때 분명히 요청에 SiteMinder 쿠키를 추가하지 않기 때문입니다 따라서 WCF 서비스 프록시 클래스를 프로그래밍 방식으로 생성하는 간단한 방법이 있는지 궁금합니다.SiteMinder 보호 사이트에 WCF 메타 데이터 노출

답변

1

컴파일 된 서비스 DLL 파일에 액세스 할 수있는 경우 the SvcUtil command line utility을 사용하여 데이터 계약에 대한 WSDL 및 관련 XSD를 생성 할 수 있습니다. 이 방법의 주된 주름은 schemaLocation 속성 값의 각 xsd : import 요소에 SvcUtil에 의해 생성 된 XSD 파일의 이름을 추가해야한다는 것입니다.

다음은 수정 된 xsd : import 요소의 샘플입니다. "http://tempuri.org/"네임 스페이스의 경우 "tempuri.org.xsd"값과 함께 schemaLocation 특성을 추가하여 서비스 참조 추가 프로세스에서 WSDL 파일과 동일한 폴더에있는 파일을 찾도록했습니다. WSDL이 대신 wsdl : import를 사용하는 경우 schemaLocation 속성 대신 위치 속성을 추가하십시오. 이것은 related question and answer으로 시작해야합니다.

<wsdl:types> 
    <xsd:schema targetNamespace="http://tempuri.org/Imports"> 
     <xsd:import namespace="http://tempuri.org/" schemaLocation="tempuri.org.xsd" /> 
     <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" /> 
    </xsd:schema> 
    </wsdl:types> 

편집 : 컴파일 된 서비스 DLL을 사용하여 클라이언트 코드를 생성은

두 단계의 과정이 필요합니다. SvcUtil은 클라이언트를 생성하기 위해 서비스 WSDL이 필요합니다. 컴파일 된 DLL을 직접 사용할 수 없습니다.

먼저 ServiceContract가 포함 된 DLL을 사용하여 WSDL을 생성합니다. 서비스 계약 DLL이 동일한 폴더에있는 경우 서비스 구현 파일을 사용할 수 있다고 생각합니다.

cd "\Path\To\Your\Service\DLLs" 
svcutil YourService.DLL 

서비스 구조에 따라 여러 파일이 생성됩니다. 하나의 .WSDL 파일과 여러 개의 .XSD 파일이 있습니다. 위에 표시된대로 파일을 편집하십시오.

마지막으로, 중 다음과 같이는 svcutil을 클라이언트 코드를 생성하거나 사용하는 (단지 전체 경로와 파일 이름을 입력합니다) 편집 된 .wsdl 파일을 선택합니다 서비스 참조 추가 대화 상자는 Visual Studio를 사용

svcutil *.wsdl *.xsd /language:C# 
+0

I을 내 질문에 명확하지 않을 수도 있습니다 : 내 문제는 SiteMinder로 보호되어 있기 때문에 svcutil이 메타 데이터에 접근 할 수 없다는 사실입니다. –

+0

맞습니다. SvcUtil 명령 줄에서 서비스 MEX URL을 사용하고 있으며, 이는성에 대한 두려움 때문에 작동하지 않습니다. 서비스 계약을 포함하는 DLL을 사용하여 WSDL을 생성 한 다음 클라이언트를 생성하는 것이 좋습니다. 나는 그것을 명확하게하기 위해 대답을 업데이트 할 것이다. –

+0

아, 맞아. 지금 받아. :) 한 묶음 고마워. –