2011-03-15 3 views
2

service.svc 파일에 매개 변수를 배치하여 응용 프로그램 특정 구성 정보를 내 WCF로 전달할 수 있습니다.WCF .svc 파일에 매개 변수 추가

다른 앱에서 호출하는 표준 오류 로깅 웹 서비스가 있습니다. 다른 이름으로 서비스를 호출하고 서비스 호출 방법을 알고 다른 파일에 쓸 수 있기를 바랍니다. 예를 들어, 응용 프로그램은 Warning.svc, Serious.svc 또는 Critical.svc를 호출하고 해당 파일에 메시지를 쓰는 것에 따라 호출합니다.

그래서 내 생각은 .svc 파일에 WCF가 어떻게 호출되었는지 알려주는 매개 변수를 넣는 것입니다. 그게 아니라면 내 코드 내에서 svc 파일의 이름을 가져올 수있는 방법이 있습니까?

나는 각 호출에 대해 다른 메소드를 가질 수 있다는 것을 알고 있지만 추가 유형을 추가 할 때 WCF를 수정해야합니다. 반면에 다른 .svc를 추가 할 수있는 반면 코드는 수정하지 않고도 기능을 추가 할 수 있습니다.

답변

1

.svc 파일에서이 작업을 수행 할 수 있다고 생각하지 않습니다.

그러나 이것은 당신이하고 싶은 일에 대해 상당히 복잡한 방식으로 보입니다. 전형적인 웹 서비스 스타일이 아닙니다. 본질적으로 동일한 웹 서비스에 대해서는 약간의 차이점만으로 너무 많은 끝점을 가져서는 안됩니다. 앞으로 유지해야 할 악몽이 될 것입니다.

하나 이상의 매개 변수 (문자열 또는 열거 형)를 허용하도록 메서드를 수정할 수없는 이유는 어떤 파일에 로그온할지 나타냅니다. null를 건네 받았을 경우는, 디폴트의 값에 기입 해주세요. 일반적인 로깅 패키지에서 일반적으로 수행되는 방식입니다.

3

svc 파일 <%@ ServiceHost %> 태그에서 사용자 정의 ServiceHostFactory를 지정한 다음 원하는대로 서비스 속성을 사용할 수 있습니다. 이 값은 SHFactory로 전달되어 SHFactory를 파싱하고 ServiceHost를 초기화 할 수 있습니다.

Service1.svc :

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService2.Service1" Factory="WcfService2.CustomServiceHostFactory" CodeBehind="Service1.svc.cs" %> 

CustomServiceHostFactory.cs :

namespace WcfService2 
{ 
    using System; 
    using System.ServiceModel; 
    using System.ServiceModel.Activation; 

    public class CustomServiceHostFactory : ServiceHostFactoryBase 
    { 
     public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses) 
     { 
      var host = new ServiceHost(Type.GetType(constructorString), baseAddresses); 
      host.AddDefaultEndpoints(); 
      return host; 
     } 
    } 
} 
+0

재미있는

여기에 단지 기본 WCF 동작을 반영하는 예입니다. 새로운 것을 매일 배우십시오! –

+0

나는이 방법에 대해 전혀 몰랐으며, MSDN 문서에서 분명하지 않다. 왜 그렇게 끔찍한가! 이 온라인 어딘가에 대해 배웠습니까? 링크가 있습니까? –

+0

리플렉터 + 시행 착오. 이제 smaine에 꽤 좋은 글이 있음을 알았지 만 http://hyperthink.net/blog/servicehostfactory-vs-servicehostfactorybase/ – alexdej

관련 문제