2016-06-10 9 views
1

Ich habe eine C# -Anwendung, die selbst einen OData WCF-Datendienst hostet.

Der Host ist vom Typ DataServiceHost und wird programmgesteuert im Code konfiguriert, ohne die Konfigurationsdatei zu verwenden.

Die Verbindung zum Dienst erfolgt über webHttpBinding, das SSL und Standardauthentifizierung verwendet. Mein Dienst hört Port 1234.

Wenn ein Client zu Metadaten https://localhost:1234 $ durchsucht, können sie auf die XML-Metadaten für den Dienst zugreifen.

Ich möchte den Zugriff auf die Metadaten zur Zeit verhindern, kann aber nicht herausfinden, wie man sie deaktiviert?

Kann jemand den Zugriff auf $ metadata im obigen Szenario deaktivieren?

Antwort

1

ich endlich einen Weg gefunden, dies zu tun ....

// Disable mex ($metadata) 
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
if (smb == null) 
{ 
    smb = new ServiceMetadataBehavior(); 
    smb.HttpsGetEnabled = false; 
} 
host.Description.Behaviors.Add(smb); 

host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, 
       MetadataExchangeBindings.CreateMexHttpsBinding(), 
       "$metadata"); 

ich mit Einstellung der ServiceMetadataBehavior mehrmals ohne Wirkung gespielt. Der Trick, um HttpsGetEnabled = false wirksam werden zu lassen, besteht darin, einen Metadatenendpunkt mit dem Namen "$ metadata" zu erstellen.

Wenn Sie keinen mex-Endpunkt erstellen, scheint der DataServiceHost nur seinen eigenen Metadaten-Endpunkt zu verwenden und ignoriert Ihre Verhaltenseinstellungen.

HTH