2009-08-25 4 views
14

Silverlight 응용 프로그램에서 wcf 서비스를 사용하고 있습니다. wcf 서비스의 위치는 ServiceReferences.ClientConfig 파일에 명시되어 있으며 응용 프로그램이 설치된 위치로 변경해야합니다.Silverlight : xap 안에 넣을 때 ServiceReferences.ClientConfig를 설정하는 방법

그러나이 파일은 xap 파일에 포함되어 있으며 응용 프로그램을 배포 할 때 쉽게 변경할 수있는 것이 아닙니다. Silverlight 응용 프로그램에서 wcf 서비스에 대한 참조를 수행하는 또 다른 방법이 있습니까? 아니면 xap 파일에서 ServiceReferences.ClientConfig를 어떻게 변경합니까?

답변

2

이 블로그에서 해결책을 찾았습니다.

http://www.andybeaulieu.com/Default.aspx?tabid=67&EntryID=132

은 여기에서 WCF 서비스 엔드 포인트는 Silverlight 응용 프로그램의 위치에서 계산

+0

이 솔루션은 내가 아는 한 최선입니다. 다른 하드 코딩 된 솔루션은 나에게 적합하지 않습니다. – helios456

8

내가 사용하는 열려있어 그러나 이것은 나를 위해 작동 더 나은 방법이있을 수 있으며,이 유연.

웹 응용 프로그램 Web.config에서 AppSettings에 변수를 추가하고 기본 URL을 저장합니다. SVC 파일의 위치를 ​​저장하지 않는다는 것을 알기 때문에 나중에 추가 할 것입니다. 이것은 내가 일반적으로 가리키는 SVC가 여러 개 있기 때문입니다. 다르게 선택할 수도 있습니다. 내 웹 응용 프로그램의 웹 페이지에서

<appSettings> 
    <add key="ServiceURI" value="http://localhost:64457/"/> 
</appSettings> 

는 InitParms라는 PARAM를 추가, 이것은 당신이 키의 목록을 추가 할 수 있습니다,합니다 (XAP 파일을 읽어들이 쉼표로 구분) 쌍의 값

<div id="silverlightControlHost"> 
    <object data="data:application/x-silverlight," type="application/x-silverlight-2" 
     width="100%" height="100%" ID="Xaml1" > 
     <param name="InitParams" value="ServiceURI=<%= ConfigurationManager.AppSettings("ServiceURI") %>" /> 
실버 App.xaml.vb에서

는, 리소스에 모든 InitParms을로드하거나 위치를 내 XAML 파일의에서 다음

Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) Handles Me.Startup 
    If e.InitParams IsNot Nothing Then 
     For Each k As Generic.KeyValuePair(Of String, String) In e.InitParams 
      Me.Resources.Add(k.Key, k.Value) 
     Next 
    End If 

원하는 이제까지 내가 구성된 URI로 서비스를 초기화 할 수 있습니다, 나는이 이러한 제안 우수한이

Private Sub InitializeService() 
    Dim uri As String = App.Current.Resources("ServiceURI") 
    If uri Is Nothing OrElse uri = String.Empty Then 
     'if there is no value added in the web.config, I can fallback to default values 
     _client = New ServiceClient 
    Else 
     'Notice I hardcoded the location of the SVC files in the client and append there here, you may choose not to do this 
     Dim uri_withservice As String = uri & "svc/secure/Service.svc" 
     _client = New ServiceClient("CustomBinding_Service", New EndpointAddress(uri_withservice)) 
    End If 
End Sub 
7

같은 ethod, 내 WCF ServiceReferences.ClientConfig 데이터를 동적으로 URI가의 Web.config에서 읽을 서비스로, 응용 프로그램 시작시 변경 될 수있었습니다. 이것은 VS2010의 "web.config transformations"을 사용하여 가능합니다.

예제 web.config.debug는 내 웹 사이트에서 "게시"를 선택했을 때 ServiceURI가 어떻게 바뀌 었는지 보여줍니다.

<?xml version="1.0"?> 
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 --> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <...> 
    </connectionStrings> 

    <appSettings> 
    <add key="ServiceURI" value="http://my.location.com/myService.svc" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(key)" /> 
    </appSettings> 
</configuration> 

내 기본 web.config에는 로컬 서비스를 가리키는 동일한 키/값이 있습니다. 테스트/프로덕션 환경에 배포 할 때마다 ServiceURI를 변경하는 것을 기억할 필요가 없습니다. 좋아, 나는 그것을 잠시 동안 찾고 있었다.

2

여기 제시된 해결책은 구성 설정에 맞게 응용 프로그램을 수정한다는 점에서 실용적이지 않습니다. 이 blog entry이 못했습니다.

+0

배포시 web.config에 적용 할 수있는 xml 변환을 반영하기 때문에 이것이 최상의 솔루션이라는 것을 알았습니다. – Calanus

관련 문제