WCF verwendet http://tempuri/1/number
für Content-ID-uri-Verweise bei der Verarbeitung von MTOM-Streamanforderungen.WCF: (MTOM) gibt es eine Möglichkeit, das in xop verwendete Schema zu ändern: Inhaltsreferenz Uris von WCF generiert?
Gibt es eine Möglichkeit, WCF zu zwingen, eine andere Content-ID-Verweise für den xop zu verwenden: Include?
Hintergrund des Problems:
Ich baue ein .NET-Client für MTOM JAX ws Java Web Service aktiviert, die große Datenuploads gestreamt Griffe. Ich habe die Service- und Datenkontakte manuell erstellt (die von WSDL generierten Verträge waren nicht korrekt und erlaubten kein Streaming).
Das Problem ist, dass der Web-Service (Jax Ws) nicht den Anfragetext erhält, der die Daten enthält.
Es empfängt die Daten, die in Kopfzeilen übertragen werden.
Wir haben einen Java-Client für die ws gebaut - dieser funktioniert.
Ich habe gefangen genommen und den HTTP-Verkehr im Vergleich, wenn Anfragen von Java und wcf Ausgabe, und der einzige Unterschied besteht darin, wie Content-ID Referenz erzeugt wird, wenn die Multipart Daten veröffentlichen:
WCF verwendet
http://tempuri/1/...
Inhalt -ID Referenzen, die in codiertem Wert ergeben, wiehref="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928"
Java-Client verwendet "E-Mail-style" uris, wie
href="cid:[email protected]"
Diese Ausbeute bei der folgenden XOP-includes (Data ist das einzige Element in dem Seifenkörper) (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>
später, in den Multipart-Daten, wobei der Gehalt an von uncodierten bezeichnet wird 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
ich denke, es kann ein Fehler in dem JAX Web-Service-Framework und es ist nicht zu erkennen WCF-generated + urlencoded Content-ID uri Referenzen.
Gibt es eine Möglichkeit, WCF zu zwingen, eine andere Content-ID-Verweise für den xop zu verwenden: Include?
EDIT: Ich habe die XmlMtomWriter gefunden haben, die die GenerateUriForMimePart Methode hat, wird diese verwendet Inhalt-IDs zu generieren.
public static string GenerateUriForMimePart(int index)
{
return string.Format(CultureInfo.InvariantCulture,
"http://tempuri.org/{0}/{1}", new object[] { index, DateTime.Now.Ticks });
}
Es scheint nicht, dass die ID-Generation in irgendeiner Weise übersteuerbar ist.
Ein ähnliches Problem wird hier beschrieben, sofern die Antwort nicht hilft: http://social.msdn.microsoft.com/Forums/en/wcf/thread/f90affbd-f431-4602-a81d-cc66c049e351
ja, das ist dreckig, aber herzlichen Glückwunsch zum Finden einer Lösung, die funktioniert. Ich hätte nicht gedacht, InvariantCulture durch Reflexion zu ersetzen, aber es scheint, dass es wirklich die einzige Option ist. – Marek