WCF używa http://tempuri/1/number
dla identyfikatorów Content-ID podczas obsługi przesyłanych strumieniowo żądań MTOM.WCF: (MTOM) czy istnieje sposób na zmianę schematu używanego w Xop: URL-a odniesień do treści generowanych przez WCF?
Czy jest jakikolwiek sposób wymuszania WCF do użycia różnych odniesień Content-ID dla xop: Include?
Tło problemu:
buduję klienta .NET dla MTOM włączona ws JAX java serwisu WWW, który obsługuje przesyłanie danych strumieniowo duże. Mam ręcznie wykonane usługi i kontakty danych (wygenerowane przez WSDL kontrakty nie były poprawne i nie zezwalano na przesyłanie strumieniowe).
Problem polega na tym, że usługa WWW (jax ws) nie otrzymuje treści żądania zawierającej dane.
Odbiera dane przesyłane w nagłówkach.
Zbudowaliśmy klienta java dla ws - ten działa.
mam zrobione i porównał ruch HTTP przy wydawaniu żądania z Java i WCF, a jedyną różnicą jest to, w jaki sposób odniesienia Content-ID jest generowany podczas wysyłania danych wieloczęściowy:
WCF używa
http://tempuri/1/...
zawartość -id referencje, które dają wartości zakodowanego, jakhref="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928"
klienta Java używa "email-styl" URI, jak
href="cid:[email protected]"
Te Wydajność następujące xop-zawierającej (danych jest jedynym elementem korpusu mydło) (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>
później, w danych wielowarstwowym zawartość jest określana przez niezakodowany 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
Chyba nie może być błąd w ramach jax usług internetowych i nie rozpoznaje WCF generowane + urlencoded Content-ID referencji uRI.
Czy jest jakikolwiek sposób wymuszania WCF do użycia różnych odniesień Content-ID dla xop: Include?
EDIT: Znalazłem XmlMtomWriter który ma metodę GenerateUriForMimePart ta służy do generowania Content-ID.
public static string GenerateUriForMimePart(int index)
{
return string.Format(CultureInfo.InvariantCulture,
"http://tempuri.org/{0}/{1}", new object[] { index, DateTime.Now.Ticks });
}
Nie wydaje się, że generowanie identyfikatora jest w jakikolwiek sposób możliwe do zastąpienia.
Podobny problem jest opisany tutaj, odpowiedź pod warunkiem nie pomaga: http://social.msdn.microsoft.com/Forums/en/wcf/thread/f90affbd-f431-4602-a81d-cc66c049e351
tak, to jest brudne, ale gratuluję znalezienia rozwiązania, które działa. Nie pomyślałbym o zastąpieniu InvariantCulture przez refleksję, ale wygląda na to, że jest to jedyna opcja. – Marek