2013-05-14 5 views
0

IIS의 WCF 배포에 대해 배우고 있으며 이상한 것을 발견했습니다. 기본적으로 내 서비스는 web.config에서 요소의 behaviorConfiguration 특성을 설정하는 방법과 상관없이 기본 동작 만 사용합니다.IIS WCF 구성 : 서비스는 기본 동작 만 사용합니다.

그래서 여기 내 Web.config의 관련 부분입니다 :

<system.serviceModel> 
<services> 
    <service name="TableImport" behaviorConfiguration="MyServiceTypeBehaviors"> 
    <endpoint address="" binding="wsHttpBinding" /> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="false" /> 
    </behavior> 
    <behavior name="MyServiceTypeBehaviors" > 
     <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
</system.serviceModel> 

기본 serviceMetadata 요소가 볼 수 있듯이 httpGetEnabled = MyServiceTypeBehaviors serviceMetadata 요소가 httpGetEnabled = "true"를 가지고 "false"를 반면. 내 서비스의 behaviorConfiguration 속성이 "MyServiceTypeBehaviors"로 설정되어 있는지 확인할 수도 있습니다.

결과적으로 내 서비스는 브라우저를 통해 메타 데이터를 게시하고 Visual Studio의 "서비스 참조 추가"기능을 통해 메타 데이터가없는 동일한 결과를 얻을 수 있습니다.

반면에 메타 데이터를 기본 동작으로 설정하고 "MyServiceTypeBehaviors"에서 메타 데이터를 사용하지 않도록 설정하고 MyServiceTypeBehaviors를 계속 사용하도록 설정 한 경우 브라우저와 VS를 통해 메타 데이터를 모두받습니다.

내게이 테스트는 설정 파일을 어떻게 설정했는지 상관없이 내 서비스가 기본 동작을 사용함을 나타냅니다. 그러나 동시에 할 수 있습니다. 을 기본 동작으로 변경할 수 있습니다. 내 web.config 실제로 서비스 작동 방식에 영향을 줄 수 있습니다. 어떤 아이디어?

+0

당신이 기본 동작을 제거하면 어떻게됩니까 :

 - When the default behavior's httpGetEnabled is set to false, you get no metadata. - When the default behavior's httpGetEnabled is set to true, you get the metadata. 

이 상황에서 가장 쉬운 해결책은 간단하게 정의하려고하는 엔드 포인트에 대한 계약을 추가하는 것입니다 :이 문제 설명과 일치? 당신의 특정 행동이 호응합니까? – evgenyl

+0

기본 동작을 제거하고 MyServiceTypeBehaviors 및 MyServiceTypeBehaviors 만 메타 데이터를 사용하도록 설정하면 결과에 메타 데이터가 표시되지 않습니다. 그래서 내 평가는 기본 동작을 제거해도 내 특정 동작이 올바르게 작동하지 않는다는 것입니다. –

+0

기본 behsvior 및 정책 버전을 제거하려고합니다. – evgenyl

답변

-1

"메타 데이터"또는 "MEX"엔드 포인트를 추가해야합니다. 처럼 보이게하기 위해 설정의 당신의 서비스 섹션을 변경합니다 : 계약없이 엔드 포인트가 그것을 사용하고 어떤 서비스를 알고 notgoing되도록

 <services> 
    <service name="TableImport" behaviorConfiguration="MyServiceTypeBehaviors"> 
     <endpoint address="" binding="wsHttpBinding" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 
+0

질문에 설명 된대로 메타 데이터를 얻을 수 있기 때문에 끝점이 중요하지 않은 것처럼 보입니다. 문제는 명명 된 동작보다는 * 기본 * 동작으로 메타 데이터를 사용하도록 설정하여 메타 데이터를 작동시킬 수 있다는 것입니다. 어쨌든 필자는 테스트를 위해 끝점을 추가하여 보았습니다. 아무런 차이가 없었습니다. –

+0

@jeff - mex 끝점없이 메타 데이터를 노출 할 수 있습니다. Mex - 그것은 단지 다른 종점입니다. – evgenyl

0

당신은 당신의 엔드 포인트에 계약을 지정하지 않습니다.

.NET 4.0 이상을 사용하고 있고 설명했던 문제를 기반으로하는 경우 실제로는 서비스 주소를 기반으로하는 기본 끝점에 연결하고 있습니다. 기본 엔드 포인트는 프레임 워크에서 제공됩니다.

이와 같이 기본 서비스 동작을 사용합니다.

<endpoint address="" binding="wsHttpBinding" contract="FullyQualified.IContractName" /> 
+0

주사위가 없음 ... 저는 계약서 속성에 값으로 완전한 계약 이름을 추가했으며 이전과 동일한 결과가 나오는 테스트가 나옵니다. –