WCF utilise http://tempuri/1/number
pour les références uri Content-ID lors de la gestion des requêtes MTOM en streaming.WCF: (MTOM) existe-t-il un moyen de changer le schéma utilisé dans xop: uris de référence de contenu généré par WCF?
Existe-t-il un moyen de forcer WCF à utiliser des références Content-ID différentes pour le xop: Include?
Contexte du problème:
Je construis un client .NET pour le service JAX activé MMD ws java web qui gère ruisselait gros téléchargements de données. J'ai fabriqué à la main les contacts de service et de données (les contrats générés par WSDL n'étaient pas corrects et n'autorisaient pas le streaming).
Le problème est que le service Web (jax ws) ne reçoit pas le corps de la requête contenant les données.
Il reçoit les données transférées dans les en-têtes.
Nous avons construit un client Java pour le WS - celui-ci fonctionne.
J'ai capturé et comparé le trafic HTTP lors de l'émission des demandes de java et WCF, et la seule différence est dans la façon dont la référence Content-ID est généré lors de la publication des données multipart:
WCF utilise
http://tempuri/1/...
contenu références -id qui donnent de la valeur encodée, commehref="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928"
client Java utilise "style email" uri, comme
href="cid:[email protected]"
Ces rendements dans ce qui suit xop-inclut (Data est le seul élément dans le corps de savon) (XOP includes specification)
//WCF:
<Data>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928" />
</Data>
//JAVA:
<Data>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:[email protected]"/>
</Data>
plus tard, dans les données en plusieurs parties, dont le contenu est désigné par unencoded Content-ID:
--uuid:7e166bb7-042f-4ba3-b6ef-98fbbc21244b+id=1
Content-ID: <http://tempuri.org/1/634019957020047928>
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
Je suppose qu'il peut un bogue dans le cadre de services Web JAX et il ne reconnaît pas WCF générés + urlencoded Content-ID références uri.
Existe-t-il un moyen de forcer WCF à utiliser des références Content-ID différentes pour le xop: Include?
EDIT: J'ai trouvé le XmlMtomWriter qui a la méthode GenerateUriForMimePart, il est utilisé pour générer Content-ID.
public static string GenerateUriForMimePart(int index)
{
return string.Format(CultureInfo.InvariantCulture,
"http://tempuri.org/{0}/{1}", new object[] { index, DateTime.Now.Ticks });
}
Il ne semble pas que la génération d'ID puisse être substituée de quelque manière que ce soit.
Un problème similaire est décrit ici, la réponse fournie ne permet pas: http://social.msdn.microsoft.com/Forums/en/wcf/thread/f90affbd-f431-4602-a81d-cc66c049e351
oui, c'est sale, mais félicitations pour trouver une solution qui fonctionne. Je n'aurais pas pensé à remplacer InvariantCulture par la réflexion, mais il semble que c'est vraiment la seule option. – Marek