2012-05-14 6 views
6

예 :런타임 중에 네임 스페이스를 ServiceContract로 동적으로 변경할 수 있습니까?

[ServiceContract(Namespace = "@[email protected]/", 
     Name = "FedExContract")] 

나는 런타임 중에 "@의 services.url의 @"의 값을 변경해야합니다.

#if Debug 
[ServiceContract(Namespace = "@[email protected]/", Name = "FedExContract")] 

#endif 

네임 스페이스는 당신이 계약의 네임 스페이스를 변경하는 경우 클라이언트 프록시를 다시해야 할 수도 있습니다으로 정적하기위한 것입니다 즉

+0

왜 런타임 중에 ** 네임 스페이스를 변경해야합니까? –

+0

이것은 기존 프로세스 중 일부를 지원하기위한 것입니다. 내 클라이언트는 Eclipse를 사용하여 IIS에 서비스를 게시하고 빌드하는 동안이 태그를 대체합니다. 이 모든 값을 빌드 프로세스 대신 데이터베이스로 이식 할 계획입니다. – WinFXGuy

+0

이것이 가능하다고 나는 상상할 수 없다. 네임 스페이스가 언제 바뀔까요? 서비스가 호출 될 때마다 점검합니까? DB에서 뭔가를 읽을 수있을 때 서비스가 다시 시작될 때만 작동하는 것을 볼 수 있지만, 시작시에 항상 런타임시 변경되지 않습니다. 현재 진행중인 프로 시저가 런타임에 변경되지 않으므로 왜 이것이 현재 요구 사항인지 확실하지 않습니다. –

답변

0

는 조건부 컴파일 기호를 사용하는 것보다 다른 생각 할 수 없습니다.

+0

이것이 유일한 옵션입니다. – WinFXGuy

0

런타임 중에 변경할 수 있습니다. 그러나 그것은 많은 일이 될 것이고 서비스가 시작되기 전에 일어날 것입니다. 서비스가 시작되면 계약 정보를 수정할 수 없습니다.

저는 개인적으로 DB에 의존하는 서비스 시작을 좋아하지 않습니다. 무언가가 깨지면 서비스가 절대로 나오지 않고 문제 해결이 IT를위한 복잡한 프로세스가 될 수 있습니다. 내가 런타임 경로를 가지려면 네임 스페이스 값을 설정 파일에 저장합니다. 간단하게 유지하면서 질문에 설명하는 것과 같은 사후 배치 토큰 대체를 가능하게합니다.

의견에서 빌드 프로세스를 언급합니다. 이것이 우리가 처리하는 방법입니다. 네임 스페이스를 상수 문자열로 만듭니다. 그래서 예를 들면 :

별도의 파일 선언에서 지금
[DataContract(Namespace=Constants.CURRENT_NAMESPACE] 
public class MyClass 
{ } 

:

// in a separate file define: 
public static class Constants 
{ 
    public const string CURRENT_NAMESPACE = "url://Services"; 
}; 

당신이 상수가 새로운 정의 파일에서 다른 환경 스왑 구축하려는 :

//As a part of your build process switch the Constants file: 
public static class Constants 
{ 
    public const string CURRENT_NAMESPACE = "url://Eclipse/Services"; 
}; 

관리하기 쉽고, 네임 스페이스가 사용되고 있는지 항상 알기 때문에 서비스가 항상 시작됩니다. 그게 효과가 있니?

+0

우리는 비슷한 것을합니다. Eclipse/Ant를 사용하는 대신 MS Build에서이 작업을 수행 할 수있는 방법이 있습니까? – WinFXGuy

+0

나는 거기에있을 것이라고 확신하지만 나는 묻는 사람이 아닙니다. 게시 할 두 번째 좋은 질문 일 수 있습니다. – ErnieL

관련 문제