2010-06-02 9 views
1

J'ai un service de données WCF pour lequel j'ai un réécriteur d'URL personnalisé afin que l'URL réelle ne soit pas visible et je peux ajouter des éléments spéciaux dans le chemin pour la personnaliser.
Par exemple:
http://localhost/Data/ABCD.odata/
Maps:
http://localhost/Data/OneData.svc/Comment puis-je modifier la base xml: publiée par un service de données WCF?

Cela fonctionne presque, sauf que le service est republier dans le fichier XML de réponse le chemin réel où il se trouve applications ainsi comme PowerPivot pour Excel cherche à cette URL et faire le deuxième coup sur cette URL pas sur celui que je veux.

Donc la question est comment puis-je forcer le service à publier dans le xml: base une URL personnalisée.

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> 
<service xml:base="http://localhost/Data/OneData.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app"> 
    <workspace> 
    <atom:title>Default</atom:title> 
    <collection href="Products"> 
     <atom:title>Products</atom:title> 
    </collection> 
    </workspace> 
</service> 

Je veux que publier:

<service xml:base="http://localhost/Data/ABCD.odata/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" 

Répondre

0

Pour ce faire, vous devez fournir un hébergement sur mesure pour votre service de données WCF. Un exemple fait partie de ce blog. Regardez la partie sur l'implémentation de l'interface IDataServiceHost. http://blogs.msdn.com/b/tom_laird-mcconnell/archive/2010/01/18/using-ado-net-wcf-data-services-for-streaming-infinite-event-result-sets.aspx

L'astuce consiste à fournir les bonnes valeurs de propriété AbsoluteRequestUri et AbsoluteServiceUri. Ce sont les valeurs qui seront utilisées par le service pour écrire la réponse avec (y compris le xml: base).