2011-05-12 3 views
2

I 메타 데이터 교환을위한 MEX 엔드 포인트와 서비스를 게시 그리고 난 메타 데이터 정보WCF의 MEX는 호스트

DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint()); 
FindCriteria findCriteria =  FindCriteria.CreateMetadataExchangeEndpointCriteria(ContractType); 
findCriteria.Duration = TimeSpan.FromSeconds(15); 
findCriteria.MaxResults = 1;// MaxResults; 

FindResponse result = discoveryClient.Find(findCriteria); 
discoveryClient.Close(); 

ServiceEndpointCollection eps = MetadataResolver.Resolve(ContractType, result.Endpoints[0].Address); 
return eps[0].Binding; 
에게 그것을 발견하고 얻을 수 아래의 코드를 사용하고 있습니다에서 전체 바인딩 정보를 포함하지 않습니다

클라이언트에서 메타 데이터 정보를 얻으면 바인딩 정보 (OpenTimeout, ReceiveTimeoutSendTimeout)가 기본값으로 복원됩니다. 여기

내 거의 동일 내가 찾은 또 다른 질문 호스트 여기

<binding name="MyServiceBinding" closeTimeout="00:05:00" openTimeout="00:05:00" 
     receiveTimeout="23:50:00" sendTimeout="00:05:00" maxReceivedMessageSize="50000000"> 
    <readerQuotas maxStringContentLength="50000000" maxArrayLength="50000000" /> 
    <reliableSession ordered="true" inactivityTimeout="00:01:00" enabled="false" /> 
    <security mode="None" /> 
</binding> 

의 바인딩 정보입니다.

WCF Service Binding taking default values instead of custom values

내가 뭔가 잘못하고있어 알고 싶습니다

또는 I 메타 데이터 교환의 개념을 잘못 이해합니다.

내가하려고하는 일은 내 고객에게 필요한 모든 정보를 보내어 자동으로 구성하고 하드 코드 구성이 없도록하는 것입니다.

답변

4

나는 당신이 잘못하고 있다고 생각하지 않습니다. 당신은 메타 데이터 교환에서 너무 많은 것을 기대하고 있습니다.

MEX의 목적은 프로그래밍 방식으로 새로운 서비스를 발견하고 해당 서비스에 대한 클라이언트 측 프록시를 생성하는 것입니다. 이를 위해, WSDL이있다 - 기본적으로 WSDL에 포함 된 어떤 메타 데이터 교환의 일부입니다

  • 서비스 계약/서비스 방법 그 서비스 방법에 필요한
  • 매개 변수에 대한 XML 스키마에
  • 데이터 유형 선언 등을 사용하는 바인딩과 같은 사용되는 데이터 유형
  • 부가 서비스 관련 정보

그러나 MEX는 하지 사기꾼을한다 모든 WCF 특정 구성 설정 - 사용자가 발견 한 것입니다. MEX는 작동하는 클라이언트 측 프록시를 만들지 만 서버에서 클라이언트로 모든 구성 설정을 전송할 의도는 없습니다. 클라이언트 쪽에서 직접 코드를 직접 작성해야합니다.

+0

대신 WSDL을 사용해야합니까? –

+1

@Jose Manuel Ojeda : 아니요. 별 차이가 없습니다. MEX와 WSDL은 거의 같습니다. MEX 또는 WSDL을 통한 타임 아웃과 같은 설정 정보를 자동으로 교환하는 방법은 없습니다. –

+0

maxMessageLenght를 수정할 때이 문제에 직면했습니다. 전체 바인딩 정보를 게시 할 수 없으면 클라이언트 측에서 구성 정보가 필요하므로이 전체 mex 게시가 쓸모 없게됩니다. – Bruno