2011-02-23 3 views
14

.NET 클라이언트 응용 프로그램에서 WCF 웹 서비스를 사용하려고하는데 프로그래밍 방식으로 끝점을 만들 수 있어야한다고 생각하지만 어떻게해야할지 모르겠다. 이 오류를 해결, 내가 소비하려고하는 응용 프로그램을 형성하는 간단한 윈도우를 생성하는 동안클라이언트 응용 프로그램에서 코드로 WCF 끝점 구성을 만드시겠습니까?

Could not find default endpoint element that references contract 'IEmailService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

: 나는 응용 프로그램을 실행하려고 할 때, 나는 다음과 같은 오류가 발생하고, 때문에이 작업을 수행 할 필요가 있다고 생각 같은 웹 서비스. 이 테스트 응용 프로그램을 사용하면 웹 서비스에 성공적으로 연결할 수 있으며 유효한 응답을 얻습니다. 그러나 필자는 테스트 응용 프로그램에서 위에서 언급 한 정확한 오류를 응용 프로그램의 app.config 파일에서 system.serviceModel 노드와 모든 자식 노드를 제거하여 재현 할 수 있습니다 (해당 섹션을 모두 제거하지 않아도됩니다. 확실하지 않다). 그래서, 첫 번째 생각은 그 섹션을 실제 app을위한 app.config 파일에 추가해야하고 모든 것이 잘되어야한다는 것입니다. 불행히도, 여기에 들어 가지 않을 터무니없는 이유로, 그건 선택 사항이 아닙니다. 따라서 클라이언트 응용 프로그램 내부에서 코드로이 정보를 생성해야합니다.

여기 누군가가 내가이 문제를 해결하도록 도울 수 있기를 바라고, 이런 종류의 문제에 대해 좋은 자료를 가르쳐 주길 바랍니다.

클라이언트 응용 프로그램에서 코드로 끝점 구성을 만들 수 있습니까?

답변

37

기본적으로 Add Service Reference 작업을 수행하면 WCF 런타임에서 클라이언트 측 프록시를 생성합니다.

가장 간단한 방법은이 매개 변수를 사용하지 않는 생성자와 클라이언트 프록시를 인스턴스화하는 것입니다 사용하고, 단지 app.config에서 정보를 잡아 :

YourServiceClient proxy = new YourServiceClient(); 

이것은 <client> 항목이하는 설정 파일이 필요합니다 귀하의 서비스 계약과 함께 - 그렇지 않은 경우, 당신은 당신이 가진 오류를 얻을 것이다. -

그러나 WCF 런타임에 의해 생성 된 클라이언트 측 프록시 클래스도 추가 생성자가 하나가 예를 들어, 엔드 포인트 주소와 바인딩을 취이 설정으로

BasicHttpBinding binding = new BasicHttpBinding(SecurityMode.None); 
EndpointAddress epa = new EndpointAddress("http://localhost:8282/basic"); 

YourServiceClient proxy = new YourServiceClient(binding, epa); 

, 전혀 설정 파일이 필요하지 않습니다 - 모든 것을 코드로 정의하고 있습니다. 물론 코드에서 바인딩 및/또는 엔드 포인트의 다른 모든 속성을 설정할 수도 있습니다.

+4

이것은 ** 정확하게 ** 필요한 것입니다. 내가 얼마나 고마워하는지 말할 수 없어! – campbelt

+0

"YourServiceClient proxy = new YourServiceClient();"는 무엇입니까? ? 그것은 인터페이스입니까? 클라이언트의 종점 이름입니까? app.config XAML에서 태그에 이름을 추가 할 수 없습니다. –

9

인터페이스를 정의하는 어셈블리에 대한 참조가있는 경우 WCF 서비스를 사용하는 동쪽 방법은 System.ServiceModel.ChannelFactory 클래스를 사용하는 것입니다.

당신은 BasicHttpBinding 사용하고자하는 경우 예를 들어, : 당신은 서비스 어셈블리에 대한 참조가없는 경우

var emailService = ChannelFactory<IEmailService>.CreateChannel(new BasicHttpBinding(), new EndpointAddress(new Uri("http://some-uri-here.com/)); 

를, 다음에 생성 된 프록시 클래스에 오버로드 된 생성자 중 하나를 사용할 수 있습니다 바인딩 설정을 지정하십시오.

+0

감사합니다, eulerfx. 나는이 모든 것에 익숙하지 않기 때문에 데이터가 들어있는 변수를 사용하는 방법을 모르겠다. 그러나이 각도를 탐구하고 그것이 필요한 곳을 보게 될 것이다. – campbelt

+0

대단히 감사합니다! 나는 이것을 해결하기 위해 다음 주소에있는 리소스와 함께 당신의 제안을 사용할 수 있었다 : http://msdn.microsoft.com/en-us/library/ms734681.aspx – campbelt

+0

Arg ... 그것은 밝혀졌다. , 이것은 내 테스트 응용 프로그램이 system.serviceModel 섹션이 app.config에없는 상태에서 제대로 작동 할 수있게 해주지 만, 어떤 이유로 실제 응용 프로그램에서 여전히 동일한 오류가 발생합니다.나는 계속 연구 할 것이다. – campbelt

관련 문제