2011-05-12 32 views
2

我發佈一個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

我想知道如果我做錯了什麼,或者我誤解了元數據交換的概念。

我想要做的是發送所有必要的信息給我的客戶,以便他們可以自動配置他們自己,沒有任何硬代碼配置。

回答

4

我不認爲你做錯了任何事 - 你只是期望元數據交換過多。

MEX的目的是能夠以編程方式發現新服務,併爲這些服務創建客戶端代理。對於這一點,還有的WSDL - 基本上包含在WSDL什麼是元數據交換的一部分:

  • 服務合同/服務方法
  • 參數需要這些服務的方法在XML模式
  • 數據類型的聲明像綁定使用所使用的數據類型
  • 附加的服務相關的信息等

但MEX確實 CON保留所有WCF特定的配置設置 - 這是你發現的。 MEX將創建一個功能正常的客戶端代理 - 但它從來沒有將所有配置設置從服務器傳輸到客戶端的意圖。您需要在客戶端自己手動編寫此代碼。

+0

那我應該用WSDL來代替嗎? – 2011-05-12 19:13:39

+1

@Jose Manuel Ojeda:不,這沒什麼區別; MEX和WSDL幾乎相同。沒有任何方法可以通過MEX或WSDL自動交換配置信息,例如超時。 – 2011-05-12 19:43:32

+0

我試圖修改maxMessageLenght時只是遇到了這個問題。如果你不能發佈完整的綁定信息,這使得整個mex發佈無用,因爲你仍然必須在客戶端有一些配置信息。 – Bruno 2017-07-27 09:01:11