Windows Communication Foundation 시작 자습서 문제 해결
이 문서에서는 자습서: Windows Communication Foundation 애플리케이션 시작의 단계를 수행할 때 발생할 수 있는 가장 일반적인 문제 및 오류에 대한 솔루션을 제공합니다.
일반적인 문제
내 하드 드라이브에서 프로젝트 파일을 찾을 수 없습니다.
Visual Studio는 프로젝트 파일을 C:\Users\<user name>\source\repos에 저장합니다.
Svcutil.exe에서 생성한 App.config 파일을 찾을 수 없습니다.
Visual Studio에서 기존 항목 추가 창에는 기본적으로 다음 확장이 있는 파일만 표시됩니다.
- .cs
- .resx
- .settings
- .xsd
- .wsdl
모든 파일 형식을 표시하려면 기존 항목 추가 창의 오른쪽 아래 모서리에 있는 드롭다운 목록에서 모든 파일(*.*)을 선택합니다.
일반 오류
서비스 애플리케이션 컴파일
오류 BC30420 'Sub Main'을 'GettingStartedHost.Module1'에서 찾을 수 없습니다.
진입점이 Visual Basic 애플리케이션에 대해 올바르지 않습니다. 다음을 변경합니다.
- 솔루션 탐색기 창에서 GettingStartedHost 폴더를 선택한 다음, 바로 가기 메뉴에서 속성을 선택합니다. a. GettingStartedHost 창에서 시작 개체에 대한 목록에 있는 Service.Program(또는 특정 애플리케이션의 진입점)을 선택합니다. b. 주 메뉴에서 파일>모두 저장을 선택합니다.
서비스 애플리케이션 실행
HTTP에서 URL 'http://+:8000/GettingStarted/CalculatorService'를 등록할 수 없습니다. 사용자의 프로세스에 이 네임스페이스에 액세스할 수 있는 권한이 없습니다.
적절한 액세스를 위해 관리 권한으로 WCF(Windows Communication Foundation) 서비스를 호스팅하는 프로세스를 시작합니다.
- Visual Studio의 경우: 시작 메뉴에서 Visual Studio 프로그램을 선택한 다음, 바로 가기 메뉴에서더 보기>관리자 권한으로 실행을 선택합니다.
- 콘솔 창의 경우: 시작 메뉴에서 명령 프롬프트 메뉴를 선택한 다음, 바로 가기 메뉴에서 더 보기>관리자 권한으로 실행을 선택합니다.
- Windows 탐색기의 경우: 실행 파일을 선택한 다음, 바로 가기 메뉴에서 관리자 권한으로 실행을 선택합니다.
클라이언트 애플리케이션 컴파일
'CalculatorClient'에 '<method name>'에 대한 정의가 없고 'CalculatorClient' 형식의 첫 번째 인수를 허용하는 확장명 메서드 '<method name>'이(가) 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요.
ServiceOperationAttribute
특성으로 표시하는 메서드만 공개적으로 노출됩니다. ServiceOperationAttribute
특성을 ICalculator
인터페이스의 메서드에서 생략하면 컴파일 중에 이 오류 메시지가 표시됩니다.
형식 또는 네임스페이스 이름 ‘CalculatorClient’를 찾을 수 없습니다. (사용 중인 지시문 또는 어셈블리 참조가 없습니까?)
Svcutil.exe 도구를 사용하여 생성할 때 generatedProxy.cs(또는 generatedProxy.vb) 파일을 클라이언트 프로젝트에 추가하지 않으면 이 오류가 발생합니다.
클라이언트 애플리케이션 실행
처리되지 않은 예외: System.ServiceModel.EndpointNotFoundException: 'http://localhost:8000/GettingStarted/CalculatorService'에 연결할 수 없습니다. TCP 오류 코드 10061: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다.
서비스를 먼저 시작하지 않고 클라이언트 애플리케이션을 실행하면 이 오류가 발생합니다. 먼저 호스트 애플리케이션을 실행하여 서비스를 시작한 다음, 클라이언트 애플리케이션을 실행합니다.
Svcutil.exe 도구 사용
'Svcutil'이 내부 또는 외부 명령, 실행 가능한 프로그램 또는 일괄 처리 파일로 인식되지 않습니다.
Svcutil.exe는 시스템 경로에 있어야 합니다. 가장 간단한 해결책은 Visual Studio 명령 프롬프트를 사용하는 것입니다. 시작 메뉴에서 Visual Studio <version> 디렉터리를 선택한 다음, Developer Command Prompt for VS <version>을 선택합니다. 이 명령 프롬프트는 시스템 경로를 Visual Studio와 함께 제공되는 모든 도구에 대한 올바른 위치로 설정합니다.
서비스 및 클라이언트 애플리케이션 실행
System.ServiceModel.Security.SecurityNegotiationException: 대상 'http://localhost:8000/GettingStarted/CalculatorService'에 대한 'http://localhost:8000/GettingStarted/CalculatorService'와의 SOAP 보안 협상이 실패함
이 오류는 도메인에 참가한 컴퓨터가 네트워크에 연결할 수 없는 경우 발생합니다. 컴퓨터를 네트워크에 연결하거나 서비스와 클라이언트 모두에 대해 보안을 해제하세요.
보안을 해제하려면 다음을 수행합니다.
서비스의 경우
WSHttpBinding
을 만드는 코드를 다음 코드로 바꿉니다.// Step 3: Add a service endpoint. selfhost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(SecurityMode.None), "CalculatorService");
클라이언트의 경우 구성 파일에서 <binding> 요소 아래의 <security> 요소를 다음과 같이 업데이트합니다.
<binding name="WSHttpBinding_ICalculator"> <security mode="None" /> </binding>