2011-02-24 5 views
4

Silverlight 응용 프로그램을 빌드하고 Silverlight-WCF 서비스를 호출합니다. Visual Studio에서 응용 프로그램을 실행할 때 모든 것이 완벽하게 작동합니다. 웹 사이트에 배포하고 응용 프로그램을 실행할 때마다 웹 서비스를 호출 할 때마다 다음과 같은 오류 (또는 이와 비슷한 오류)가 발생합니다. 서비스가,라고 그는 메시지를 바탕으로 Silverlight 웹 서비스 호출은 Studio에서 작동하지만 웹 사이트에서 실행하면 실패합니다.

Message: Unhandled Error in Silverlight Application An exception occurred during the operation, making the result invalid. Check InnerException for exception details. at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 
    at SSS.MVVMCore.Silverlight.WebPortalService.GetThemeIdCompletedEventArgs.get_Result() 
    at SSS.MVVMCore.Silverlight.ViewModels.StandardBaseFrameViewModel.<.ctor>b__0(Object s, GetThemeIdCompletedEventArgs ea) 
    at SSS.MVVMCore.Silverlight.WebPortalService.WebPortalServiceClient.OnGetThemeIdCompleted(Object state) 
Line: 1 
Char: 1 
Code: 0 
URI: http://ssswebportal.com/login.aspx?p=d53ae99b-06a0-4ba7-81ed-4556adc532b2 

완전히 실행하지만, 다시 실버 라이트 응용 프로그램에 결과를 역 직렬화 할 때 뭔가 잘못 간다. 무슨 일이 일어나고 있는지 그리고 우리가 그것을 고칠 수있는 방법에 대한 제안?

< < < < < < < < < < < < < < < < < < < < < < < < < < < < 추시 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>

이우리의 해상도이었다

<client> 
    <endpoint address="http://localhost:5482/WebPortalService.svc" 
     binding="customBinding" bindingConfiguration="CustomBinding_WebPortalService" 
     contract="WebPortalService.WebPortalService" name="CustomBinding_WebPortalService" /> 
</client> 

주목하라 '로컬 호스트': 줄 ServiceReferences.ClientConfig 파일에서

, 우리는 다음과 같은 코드를 가지고 있었다. 게시 할 때 웹 서버의 주소 여야하지만 개발할 때 localhost가되어야합니다.

게시자가 게시하기 전에이 줄을 수동으로 변경할 필요가 없도록 모든 사람이 자동으로이 방법을 제안합니다.

+1

당신은 EndpointAddress를 전달하고 ServiceReferences.ClientConfig에서 설정 한 설정에 회신하지 않고 객체를 결합하여 코드에서 서비스 프록시를 생성 할 수 있어야한다. 어쩌면 엔드 포인트 구성을 직접 관리하고 일종의 #if DEBUG를 사용하여 localhost를 대체 할 수 있습니다. –

답변

2

해야 할 두 가지가 있습니다.

먼저 웹 사이트에 clientaccesspolicy.xml and/or crossdomain.xml 개의 파일을 제공하십시오. This MSDN article에는 세부 정보가 있습니다. 나는 또한 유용하다고 this blog entry 발견.

둘째, 서비스 참조 엔드 포인트가 올바른 URL을 가리키는 지 확인하십시오. 내 프로젝트의 경우, 다른 빌드 구성 (Release, Debug, Test, Beta 등) 및 여러 끝점이 있습니다. 그런 다음 코드에 #if 지시문을 사용하여 적절한 끝점을 선택합니다. 예를 들어

:

soapClient = 
#if DEBUG 
     new MySoapClient("DebugService"); 
#elif TESTRELEASE 
     new MySoapClient("TestService"); 
#elif BETA 
     new MySoapClient("BetaService"); 
#else 
     new MySoapClient("ReleaseService"); 
#endif 
+0

이것은 우리에게 훌륭한 장소를 제공해 주었고, 위의 내용을 읽고 나중에이 문제를 해결하기 위해 무엇을했는지 볼 수있었습니다 ... – ErocM

+0

@ ErocM : 질문의 변경 사항을 반영하여 답변을 업데이트했습니다. 감사. –

0

일반적으로 응용 프로그램 위치와 관련하여 WCF 서비스가 다른 도메인에 배포 된 경우에 발생합니다. 이것이 일시적인 상황이라면 같은 도메인에있는 서비스와 응용 프로그램이 해결됩니다. 가능하지 않으면 응용 프로그램에서 원격 서비스 용 프록시를 만들 수 있습니다.

관련 문제