2009-10-16 7 views
0

wsdl에서 생성 한 인터페이스로 작업하고 있으며 서비스를 Windows 서비스로 호스팅하려고 할 때 문제가 발생합니다.App.config 네임 스페이스 문제

다음 줄이 인터페이스 위에 나타납니다. 내가

[System.ServiceModel.ServiceContract] 

[System.ServiceModel.ServiceContractAttribute(Namespace="http://xxxxxx.com/", ConfigurationName="IService")] 

에서이를 변경하지 않는 한 나는 내 프로그램 (이벤트 뷰어에서 오류 로그를 호스팅하는 Windows 서비스를 시작할 수 없습니다 IService가에서 찾을 수 없습니다 계약은 말한다 서비스에 의해 구현 계약의 목록)은 다음과 같이 내가 엔드 포인트 내 app.config 파일을 나열하고 있습니다 :. I가 "http://xxxxxxx.com/IService"그것으로 계약을 변경하면이 또한 발생

endpoint address="" 
       binding="basicHttpBinding" 
       contract="Service.IService" 

ServiceContractAttribute에 나타납니다. 이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까?

설정 파일의 서비스 부분 :

<service name="Service.Service" 
      behaviorConfiguration="myServiceBehavior"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8000/Service"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="" 
       binding="basicHttpBinding" 
       contract="Service.IService" /> 
    <endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="Service.IService" /> 

    </service> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="myServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="True"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
+1

이것은 끝점 구성 문제와 같지 않지만 서비스 구성과는 다릅니다. 속성에 ConfigurationName = "IService"가 포함되어 있습니다. app.config 요소를 name = "IService"로 게시 할 수 있습니까? – itowlson

답변

1

설정에서 엔드 포인트 요소의 계약 속성은 코드에서 ServiceContractAttribute를의 ConfigurationName 속성의 값과 일치해야합니다. 그래서 귀하의 경우에는 그냥 config = "IService"라고 읽으십시오. 그러면 당신이 잘되어야합니다.

+0

이렇게하면 서비스를 시작할 수 있지만 클라이언트가 서비스를 사용하려고하면 다른 문제가 발생합니다. 새로운 질문을위한 시간! – oltman

0

엔드 포인트를 찾을 수없는 것으로 보인다. 터미널을 사용하여 엔드 포인트에서 제공된 주소로 응답하는지 확인 했습니까?

0

는 "itowlson는"자신의 의견과 올바른 궤도에 가능성이 높습니다 - 원래 서비스 계약은 구성 이름 정의

[ServiceContract(Namespace="http://xxxxxx.com/", 
       ConfigurationName="IService")] 

을하지만 설정 섹션에서 이러한 서비스 구성이 없습니다.

<service name="Service.Service" 

<service name="IService" 

에 (또는 대안으로의 ServiceContract 변경 :

봅니다이 변화!이 두 이름이 일치하거나 생략 할 필요가

[ServiceContract(Namespace="http://xxxxxx.com/", 
       ConfigurationName="Service.Service")] 

을 서비스 계약의 구성 이름 :

[ServiceContract(Namespace="http://xxxxxx.com/")] 

이 경우 서비스 구성은 실제로 서비스 계약을 구현하는 서비스 클래스의 Namespace.ServiceClassName 패턴을 기반으로합니다.

어느 쪽이든 ServiceContract 속성의 정보와 구성 파일이 일치하는지 확인해야합니다.

마크는

+0

ConfigurationName과 " oltman