WCF 클라이언트 구성 : Endpoint가 구성 파일에 있는지 확인하고 그렇지 않은 경우 코드 폴백을 확인할 수 있습니까?
-
06-07-2019 - |
문제
직렬화 된 메시지 객체를 WCF를 통해 서버로 다시 보내는 클라이언트를 만들려고합니다.
최종 개발자 (다른 부서)가 쉽게 할 수있게하려면 클라이언트 엔드 포인트 데이터를 설정하기 위해 구성 파일을 편집하는 방법을 알 필요가 없다는 것이 가장 좋습니다.
즉, 엔드 포인트가 클라이언트에 내장/하드 코딩되지 않았다는 것이 훌륭 할 것입니다.
믹스 시나리오는 나에게 가장 쉬운 솔루션으로 나타납니다.
if (config에 설명) config 파일을 사용하면 하드 코딩 된 엔드 포인트가 폴백됩니다.
내가 알게 된 것은 다음과 같습니다.
new Client();
구성 파일 정의가없는 경우 실패합니다.new Client(binding,endpoint);
공장
그러므로:
Client client;
try {
client = new Client();
}catch {
//Guess not defined in config file...
//fall back to hard coded solution:
client(binding, endpoint)
}
그러나 어떤 방법이 있습니까? 확인하다 구성 파일이 엔드 포인트가 선언되어 있는지 확인하려면 (시도/캐치 외에)?
구성 파일에 정의 된 경우 위의 것이 실패하지 않지만 오른쪽으로 구성되지 않습니까? 두 조건을 구별하는 것이 좋을까요?
해결책
다음은 구성 파일을 읽고 데이터를 관리하기 쉬운 객체에로드하는 방법입니다.
Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("system.serviceModel");
if (csg != null)
{
ConfigurationSection css = csg.Sections["client"];
if (css != null && css is ClientSection)
{
ClientSection cs = (ClientSection)csg.Sections["client"];
//make all your tests about the correcteness of the endpoints here
}
}
"CS"객체는 구성 파일에있는 모든 속성에 액세스 할 수있는 "endpoints"라는 컬렉션을 노출시킵니다.
"IF"의 "다른"분기를 취급하고 실패 사례로 취급하십시오 (구성은 유효하지 않음).
다른 팁
개선 된 버전을 제안하고 싶습니다 Alexdrenea 솔루션, 구성 섹션에는 특수 유형 만 사용합니다.
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ServiceModelSectionGroup serviceModelGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
if (serviceModelGroup != null)
{
ClientSection clientSection = serviceModelGroup.Client;
//make all your tests about the correcteness of the endpoints here
}
제휴하지 않습니다 StackOverflow