왜 당신은 당신이에 연결하는 어떤 서비스를 기반으로 클라이언트 코드를 수정해야합니까? 2 개의 다른 .config 파일을 가질 수 없습니까? 하나는 dev 서비스에 대한 연결을 포함하고 다른 하나는 테스트 서비스에 대한 연결을 포함합니까? 테스트/dev 모드를 기반으로 .config 파일을 전환하면됩니다.
물론 서비스 계약은 인터페이스이며 개발자 및 테스트 버전 모두 동일한 계약 인터페이스를 사용하지만 사용자가 묻는 것 같지 않습니다.
편집 : 당신의 서비스에 대한
압축을 풉니의 ServiceContract 인터페이스 아직 수행하지 않은 경우. 개발자와 테스트 서비스 모두 인터페이스를 구현해야합니다. 이런 식으로 뭔가 :
[ServiceContract(Namespace="http://stackoverflow.com/questions/965977")]
public interface IASRService
{
[OperationContract]
ASRItem GetASRItem();
}
귀하의 app.config (또는 Web.config의) 클라이언트에 대한 파일이 {namespace}
이 인터페이스의 네임 스페이스의 위치입니다 같은 것을 포함해야합니다. 단일 .config 파일에 둘 다 보관하려면이 방법이 유용합니다.
<system.serviceModel>
<client>
<endpoint name="ASRService" address="http://yourserver.com/ASRService"
contract="{namespace}.IASRService" binding="basicHttpBinding"/>
<endpoint name="ASRServiceTest" address="http://localhost/ASRService"
contract="{namespace}.IASRService" binding="basicHttpBinding"/>
</client>
</system.serviceModel>
서비스를 사용하는 클라이언트의 코드는 다음과 같습니다. ChannelFactory 생성자에서 구성의 이름을 지정하십시오. 중 프록시의 유형부터
ChannelFactory<IASRService> cfTest = new ChannelFactory<IASRService>("ASRServiceTest");
IASRService proxyTest = cfTest.CreateChannel();
ASRItem TestServiceItem = proxyTest.GetASRItem;
ChannelFactory<IASRService> cf = new ChannelFactory<IASRService>("ASRService");
IASRService proxy = cf.CreateChannel();
ASRItem DevServiceItem = proxy.GetASRItem;
또는
항상 IASRService, 당신은 그 개체 만 조작하는 인터페이스 유형에 대해 알 필요가있는 코드입니다. 객체를 생성 한 서비스의 버전은 신경 쓰지 않아야합니다.
또한 Michele Leroux Bustamante가 Learning WCF으로 책을 권하고 싶습니다. 이 모든 것을하는 방법에 대한 훌륭한 예!
다른 사람이보고 싶으면 제목에 질문을 적어주세요. – Macke