2009-10-23 6 views
0

WCF 서비스를 호출하는 Silverlight 응용 프로그램을 작성하고 있습니다.Silverlight에서 web.config 파일의 WCF 경로를 무시합니다.

또 다른 해결책은 실버 라이트에 대한 다음과 같은 프로젝트가 포함
- 호스팅하는 웹 프로젝트를 실버 라이트 응용 프로그램
- 실버 라이트 응용 프로그램 프로젝트
- WCF

에 서비스 참조와 실버 라이트 클래스 라이브러리 프로젝트 전에서 실버 라이트 응용 프로그램을 실행 내 locahost, Silverlight localhost를 사용하여 WCF를 호출하고 잘 작동합니다.

그런 다음 서비스 및 웹 응용 프로그램을 게시하고 다른 서버에 배포했습니다. web.config 파일이 배포 된 끝점 주소를 가리 키도록 수정되었습니다.

이제 Silverlight 응용 프로그램을 실행하면 web.config의 끝점이 배포 된 서버의 URL이지만 서비스의 로컬 호스트 URL을 조회합니다.

실버 라이트 앱은 어디에서 svc url을 조회하나요? web.config 파일에서 읽지 않는 것 같습니다. 그러나 URL이 빌드/게시 프로세스 중에 어셈블리에 포함 된 것처럼 보입니다.

의견이 있으십니까 ??

읽어 주셔서 감사합니다.

답변

4

silverlight 앱은 호스팅 서버의 web.config를 전혀 보지 않습니다. 즉, 서버 측에 있고 클라이언트에서 실행중인 Silverlight 앱에는 보이지 않습니다. Silverlight 응용 프로그램은 자체 ServiceReferences.clientconfig 파일 또는 코드에서 로컬 서비스 프록시를 만들 때 프로그래밍 방식으로 지정하는 URL을 찾습니다.

두 가지 옵션이 있습니다.
1. 배포 가능한 버전의 Silverlight 응용 프로그램을 빌드하기 전에 ServiceReferences.clientconfig를 수정하십시오.
2. URL을 사용하여 클라이언트 측 끝점을 구성하려면 코드를 사용하십시오.

두 번째 옵션은 엔드 포인트를 구성하는 표준 프로그래밍 방식 인터페이스를 사용하기 때문에 두 번째 옵션을 사용합니다. 우리는 같은 것을 할 (그러나와 MAXVALUE의는 물론 공개되는 서비스 인 경우) : "ImportServiceClient"와 "ExportServiceClient"와 같은 클래스가 서비스 참조를 작성에서 생성 된 프록시입니다

 

     public ImportServiceClient CreateImportServiceClient() 
     { 
      return new ImportServiceClient(GetBinding(), GetServiceEndpoint("ImportService.svc")); 
     } 

     public ExportServiceClient CreateExportServiceClient() 
     { 
      return new ExportServiceClient(GetBinding(), GetServiceEndpoint("ExportService.svc")); 
     } 

     protected override System.ServiceModel.Channels.Binding GetBinding() 
     { 
      BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); 
      binding.MaxBufferSize = int.MaxValue; 
      binding.MaxReceivedMessageSize = int.MaxValue; 
      binding.SendTimeout = TimeSpan.MaxValue; 
      binding.ReceiveTimeout = TimeSpan.MaxValue; 
      return binding; 
     } 

     protected EndpointAddress GetServiceEndpoint(string serviceName) 
     { 
      if (Settings == null) 
      { 
       throw new Exception("Service settings not set"); 
      } 
      return 
       new EndpointAddress(ConcatenateUri(Settings.ServiceUri,serviceName)); 
     } 

     protected EndpointAddress GetServiceEndpoint(string serviceName, Uri address) 
     { 
      if (Settings == null) 
      { 
       throw new Exception("Service settings not set"); 
      } 
      return new EndpointAddress(ConcatenateUri(address, serviceName)); 
     } 

우리 WCF 서비스. Settings.ServiceUri는 우리가 얘기해야하는 서버의 주소를 저장하는 곳입니다 (이 경우에는 호스트 된 페이지의 매개 변수를 통해 동적으로 설정됩니다. 그러나 관리하려는 모든 구성표를 사용할 수 있습니다 이 주소).

그러나 ServiceReferences.ClientConfig를 간단히 조정하려는 경우 이와 같은 코드는 필요하지 않습니다.

+0

@Clay : 고마워! 그것은 효과가 있었다. – pencilslate

1

실버 라이트를 호스트하는 ASP 페이지에서 실버 라이트 객체의 InitParams를 사용하여 WCF 서비스 URL을 전달합니다. asp 페이지의 web.config에서 URL을 가져올 수 있습니다. 내 경우 엔 효과가있어.

관련 문제