티스토리 뷰

반응형
이전 포스트에서 만들었던 WCF RIA Service는 기본적으로는 OData endpoint를 사용하는데, 이것을 SOAP endpoint를 사용하도록 변경을 해보자. SOAP으로 서비스를 사용 할 수 있으면 Windows Phone 7.1 에서도 사용이 가능하다.

이전 포스트 
Silverlight 5 & WCF RIA Service & SQL CE 4.0
http://kaki104.tistory.com/62

1. 참고 사이트
How to open a WCF RIA Services application to other type of clients: the SOAP endpoint (3/5)
http://blogs.msdn.com/b/davrous/archive/2010/12/03/how-to-open-a-wcf-ria-services-application-to-other-type-of-clients-the-soap-endpoint-3-5.aspx
그러나, 지금 환경과 약간 다른 점도 있어서 고생을 했다. 이 사이트의 다른 포스트를 보면 JSON endpoint로 변경하는 내용도 있으니 참고 하기 바란다.

2. WCF RIA Services toolkit 설치 필수

3. ASP.NET 프로젝트 레퍼런스에 Microsoft.ServiceModel.DomainServices.Hosting 추가

4. Web.config 추가

<add name="Soap" type="Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory,
        Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral,
        PublicKeyToken=31bf3856ad364e35" />

5. 빌드 한번 해주고

6. 익스플로 주소 창에서  http://nameofyourserver:port/ClientBin/NameOfYourSolution-Web-NameOfYourDomainService.svc 
입력해서 서비스가 정상 동작하는지 확인 하자.
개발 당시 내 주소는 http://localhost:33113/Services/WP7Host-Web-Service-WP7DomainService.svc 였다.


7. WCR RIA Service host
참고 자료
A Guide to Deploying RIA Services Solutions
http://blogs.msdn.com/b/bradsevertson/archive/2011/02/17/a-guide-to-deploying-ria-services-solutions.aspx

자료를 요약 하면
1) 웹서버에 .Net Framework 4가 설치 되어 있어야함
2) IIS 가 설치 되어 있어야 함(6 이나 7 버전으로)
3) RIA Services를 설치 해야함 - 가장 좋은 방법
(2번째 Bin Deployment라는 것이 있어서 할 수 도 있다고 하는데..음..시도해 보지 않았음
 3번째 GAC Deployment가 있는데 이것도 시도해 보지 않았음)
4) Web.config를 손봐야 한다는 내용
본인은 가상 서버 호스팅을 받고 있는 관계로, 서버에 RIA Service를 직접 설치 하는 방법을 사용

자료에는 없는 추가사항
1) Web Root에 WCF RIA Service를 사용하는 서비스가 존재하면, 그 하위 응용프로그램으로 등록 할 수 없음
-> 이 것 때문에 한 시간 정도 시간을 보냈는데.. Web Root에 있는 응용프로그램을 하위 응용프로그램으로 변경 하고, 동일한 레벨로 응용프로그램 추가해서 서비스 해야함
2) sdf 파일 문제인데, 이 파일이 서버에서 호스팅을 할 때는 IIS_IUSRS에 수정, 쓰기 권한을 주어야 함. 그래야 파일을 열어서 데이터를 수정 할 수 있다. 아래는 권한이 없을 경우 발생하는 오류 메시지이다.

웹 페이지 오류 세부 정보
사용자 에이전트: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
타임스탬프: Fri, 10 Feb 2012 06:37:00 UTC
메시지: Unhandled Error in Silverlight Application Load operation failed for query 'GetWP7UriListSet'. 기본 공급자가 Open에서 실패했습니다. InnerException 메시지: 데이터베이스 파일에 액세스할 수 없습니다. [ 1884,File name = C:WP7ListApp_DataWP7CE40.sdf,SeCreateFile ]   위치: System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
   위치: System.Data.EntityClient.EntityConnection.Open()
   위치: System.Data.Objects.ObjectContext.EnsureConnection()
   위치: System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   위치: System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   위치: System.Data.Objects.ObjectQuery`1.GetEnumeratorInternal()
   위치: System.Data.Objects.ObjectQuery.System.Collections.IEnumerable.GetEnumerator()
   위치: System.ServiceModel.DomainServices.Server.DomainService.Enumerate[T](IEnumerable enumerable, Int32 estimatedResultCount)
   위치: System.ServiceModel.DomainServices.Server.DomainService.Query(QueryDescription queryDescription, IEnumerable`1& validationErrors, Int32& totalCount)
   위치: System.ServiceModel.DomainServices.Hosting.QueryProcessor.Process[TEntity](DomainService domainService, DomainOperationEntry queryOperation, Object[] parameters, ServiceQuery serviceQuery, IEnumerable`1& validationErrors, Int32& totalCount)
   위치: System.ServiceModel.DomainServices.Hosting.QueryOperationBehavior`1.QueryOperationInvoker.InvokeCore(Object instance, Object[] inputs, Object[]& outputs)
줄: 1
문자: 1
코드: 0
URI: http://localhost/wp7list/Silverlight.js

IS_IUSERS에게 권한을 주기가 좀 그렇기는 하지만, 다른 처리 방법에 대해서 찾아 보지를 않아서.. 더 좋은 방법이 있다면, 리플로 남겨주기 바란다.

현재 호스트 중인 사이트
http://kaki105.cafe24.com/wp7list/

반응형
댓글