2011-12-20 39 views
5

Jestem w luźnym zakończeniu, jak dodać załącznik w moim żądaniu SOAP. Musimy spożytkować usługę WWW Thrid Party, zbudowaną w Javie, która jest najbardziej skomplikowaną rzeczą, jaką kiedykolwiek spotkałem. Wszelkie inne usługi internetowe, z których korzystaliśmy, wymagające załączników, mają metodę lub właściwość do dodania załącznika. Prosty. Jednak ten nie zapewnia takiej metody.Dodawanie załącznika do żądania SOAP

Mamy wersję komunikatu SOAP razem, dokładnie tak, jak chcemy XML, jednak jest to część pliku MIME, której nie możemy dodać.

Przykład:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> 
<soap:Header> 
<payloadManifest xmlns="http://<examplePayload>"> 
<manifest contentID="Content0" namespaceURI="http://<exampleManifest>" element="ProcessRepairOrder" version="2.01" /> 
</payloadManifest> 
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
<wsu:Created>2011-12-19T15:25:13Z</wsu:Created> 
<wsu:Expires>2011-12-19T15:30:00Z</wsu:Expires> 
</wsu:Timestamp> 
<wsse:UsernameToken><wsse:Username>username</wsse:Username><wsse:Password>password</wsse:Password></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><ProcessMessage xmlns="<examplePayload"><payload><content id="Content0"> 

<s:ProcessRepairOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.xsd" xmlns:s="http://<exampleManifest>" xmlns:gwm="http://example"> 
    <s:ApplicationArea> 
     <s:Sender> 
      <s:Component>Test</s:Component> 
      <s:Task>ProcessAttachment</s:Task> 
      <s:CreatorNameCode>Test</s:CreatorNameCode> 
      <s:SenderNameCode>XX</s:SenderNameCode> 
      <s:DealerNumber>111111</s:DealerNumber> 
      <s:DealerCountry>GB</s:DealerCountry> 
     </s:Sender> 
     <s:CreationDateTime>2010-03-26T13:37:05Z</s:CreationDateTime> 
     <s:Destination> 
      <s:DestinationNameCode>GM</s:DestinationNameCode> 
      <s:DestinationURI/> 
      <s:DestinationSoftwareCode>GWM</s:DestinationSoftwareCode> 
     </s:Destination> 
    </s:ApplicationArea> 
    <s:DataArea xsi:type="gwm:DataAreaExtended"> 
     <s:Process/> 
     <s:RepairOrder> 
      <s:Header xsi:type="gwm:RepairOrderHeaderExtended"> 
       <s:DocumentId/> 
      </s:Header> 
      <s:Job xsi:type="gwm:JobExtended"> 
       <s:JobNumber/> 
       <s:OperationId>Test</s:OperationId> 
       <s:OperationName/> 
       <s:CodesAndComments/> 
       <s:Diagnostics/> 
       <s:WarrantyClaim xsi:type="gwm:WarrantyClaimExtended"> 
        <s:OEMClaimNumber>00112233445566778899</s:OEMClaimNumber> 
        <gwm:Attachment> 
         <gwm:File><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:test.gif"/></gwm:File> 
         <gwm:Filename>test.gif</gwm:Filename> 
        </gwm:Attachment> 
       </s:WarrantyClaim> 
       <s:LaborActualHours>0.0</s:LaborActualHours> 
       <s:Technician/> 
      </s:Job> 
     </s:RepairOrder> 
    </s:DataArea> 
</s:ProcessRepairOrder> 
</content></payload></ProcessMessage></soap:Body></soap:Envelope> 

Jest to część XML, który możemy wygenerować i wysłać off, jednak jest to błędne ponieważ musimy część MIME tam jak:

Przed XML:

--MIMEBoundary 
Content-Type: application/xop+xml; charset=utf-8; type="text/xml" 
Content-Transfer-Encoding: binary 
Content-ID: <rootpart> 

Po XML

--MIMEBoundary 
Content-Type: image/gif; name=test.gif 
Content-Transfer-Encoding: binary 
Content-ID: <test.gif> 
[email protected]� 

--MIMEBoundary-- 

Przeszukałem Internet, szukając odpowiedzi, ale podałem puste. Wydaje się, że nie ma zbyt wiele dokumentacji na temat korzystania z GPW. Muszę podkreślić, że GPW jest wymogiem po stronie serwera i nie ma możliwości zmiany technologii w celu rozwiązania tego problemu.

Czy istnieje sposób, w jaki można dodać te sekcje MIME?

EDYCJA: Muszę dodać, że mogę uzyskać działający dokument XML wysłany za pośrednictwem SoapUI z załącznikami, ale nie mogę znaleźć sposobu w naszym kodzie.

Dodałem nagrodę, aby spróbować rozwiązać ten problem. Jeśli ktoś ma jakieś inne pomysły, daj mi znać.

EDYTUJ ponownie: Wiem, że minął tydzień, odkąd mogłem sprawdzić odpowiedzi tutaj, ale podczas gdy niektórzy dają dobry pomysł, gdzie szukać, wciąż rysuję puste miejsce. Straszna dokumentacja związana z XopDocument i jej metodami jest bardzo ważna, jeśli ktoś ma jakieś przykłady użycia go, ponieważ może to zapewnić, ponieważ zaczyna się ruszać!

+2

GPW jest przestarzała i nie powinna być używana bez względu na wszystko. –

+1

Cóż, John, co powiesz na znalezienie rozwiązania, zamiast chodzić po prostu udając, że wiesz wszystko. W tym scenariuszu dla mnie wymagana jest WSE. Bez niego nasze wnioski zostaną odrzucone. Nie mogę powiedzieć sprzedawcy zewnętrznemu, jak powinny kodować, mogę spróbować, ale zawsze byli najmniej pomocni na świecie. Tak więc, podczas gdy GPW nie powinno być używane, jeśli tworzysz własne oprogramowanie, jest to wymagane w tym przypadku. – anothershrubery

+0

Oczywiście jest to decyzja biznesowa, czy twoja firma powinna nadal prowadzić interesy z osobą trzecią, która wymaga użycia przestarzałego oprogramowania, w przeciwieństwie do niektórych konkurentów, którzy tego nie robią. –

Odpowiedz

6

Wystąpił ten sam problem i ostateczne rozwiązanie znalazłem przez HttpWebRequest. Kod próbki:

public string ProcessAttachment(string fileInput) 
    { 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Settings.Default.GWM_WS_WebReference_GWM); 
     req.Headers.Add("SOAPAction", "\"http://www.starstandards.org/webservices/2005/10/transport/operations/ProcessMessage/v1_01/ProcessAttachment\""); 
     req.Headers.Add("Accept-Encoding", "gzip,deflate"); 
     req.ContentType = "multipart/related; type=\"application/xop+xml\"; start=\"<[email protected]>\"; start-info=\"text/xml\"; boundary=\"----=_Part_14_1350106.1324254402199\""; 
     req.Method = "POST"; 
     req.UserAgent = "Jakarta Commons-HttpClient/3.1"; 
     req.Headers.Add("MIME-Version", "1.0"); 
     System.Net.ServicePointManager.Expect100Continue = false; 
     Stream memStream = new System.IO.MemoryStream(); 
     FileStream fileStream = new FileStream(fileInput, FileMode.Open, FileAccess.Read); 
     byte[] buffer = new byte[1024]; 
     int bytesRead = 0; 
     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      memStream.Write(buffer, 0, bytesRead); 
     } 
     fileStream.Close(); 
     Stream stm = req.GetRequestStream(); 
     memStream.Position = 0; 
     byte[] tempBuffer = new byte[memStream.Length]; 
     memStream.Read(tempBuffer, 0, tempBuffer.Length); 
     memStream.Close(); 
     stm.Write(tempBuffer, 0, tempBuffer.Length); 
     stm.Close(); 
     HttpWebResponse resp = null; 
     resp = (HttpWebResponse)req.GetResponse(); 
     stm = resp.GetResponseStream(); 
     StreamReader r = new StreamReader(stm); 
     return r.ReadToEnd();    
    } 

Parametr fileInput zawiera ścieżkę pliku, który zawiera żądanie SOAP zawierający także surowych danych binarnych pliku do zamocowania na końcu oddzielone MIME Granica

+3

-1 - brak bloków "używanych". –

+0

Nie bardzo rozumiem, jak to działa. Jeśli mówisz, że zawierają surowe dane w pliku inline, to nie jest to możliwe w moim scenariuszu. Musi być zawarty w sekcji XOP, jak zdefiniowano w przykładzie, który dałem. Jeśli brakuje mi tego w swoim kodzie, proszę o poradę. – anothershrubery

+0

Plik powinien zawierać dwie części, które opisujesz w pierwszym poście: Część XML i część danych Ras oddzielona Mime Boundary. Część danych Raw oznacza, że ​​część "GIF89a @ " powinna być zastąpiona prostym łańcuchem przy użyciu poniższego kodu: byte [] bt = File.ReadAllBytes (imageFile); string raw = System.Text.Encoding.Unicode.GetString (bt) ; Lepiej skontaktować się ze mną bezpośrednio, aby wyjaśnić, ponieważ myślę, że wykracza to poza zakres stackoverflow. –

3

Myślę, że możesz mieć kilka opcji:

1) Użyj MTOM. Wygląda na to, że automatycznie otacza wiadomość wychodzącą w blokach MIME.

2) Microsoft faktycznie zapewnia wsparcie dla generowania i czytania XOP z mime za pośrednictwem klasy XopDocument, z której dziedziczy SoapEnvelope. Ta metoda składowania to SaveToXopPackage.

Jednak sądzę, że takie podejście może wymagać wykonania wysyłania wiadomości przez HttpWebRequest. This blog ma przykład tego, jak to zaimplementować. Minusem jest to, że wymaga to dużo dodatkowego kodu i konfiguracji, aby działać poprawnie.

Idealnym rozwiązaniem byłoby przechwycenie kodu, który wykonuje transmisję obwiedni, ale nie udało mi się znaleźć właściwej lokalizacji dla tego w potoku.

+0

To tylko kilka liczby referencji, których użyłem, próbując zmusić to do działania. Mogę go wysłać do bloku MIME, ale nie wiem, jak dodać dane binarne załącznika do części MIME. – anothershrubery

+1

Ponadto, może nie być żadnej dokumentacji dla 'SaveToXopPackage', Google zwraca 28 wyników, z których większość to ta strona! – anothershrubery

1

Tak jak mówisz, że działasz przez SoapUI, myślę, że możesz po prostu poprosić SoapUI o wygenerowany XML, który wysłałeś, żebyś wiedział, jak powinien wyglądać, a następnie zmodyfikuj swój kod, aby naśladować to.

AKTUALIZACJA: po komentarzu i lekturze innych odpowiedzi bardziej szczegółowo: rozwiązanie wygląda na to, że wysyłam bezpośrednio bajty, używając HttpWebRequest jak w odpowiedzi ktsiolis. W szczegółach:

  • Tworzenie XML SOAP (przykład dałeś), koduje to bajtów w UTF-8 (1)
  • Utwórz łańcuch z początkowym mimeboundary (część w twojej „Przed XML”), kodować do bajtów w UTF8 (2)
  • Utwórz bajty dla drugiego mimeboundary (część w "po XML"). więc stworzyć łańcuch zawierający "--MIMEBOUNDARY" itd., Kodowanie na UTF8 bajtów i append wszystkich bajtów z pliku test.gif (3)
  • Dołącz wszystkich bajtów w kolejności (2), (1) i (3) i wysłać to przez przewód.

Czy to nie wystarczy?

+0

Poważnie? Wiem dokładnie, jak powinien wyglądać, po prostu nie wiem, w jaki sposób mogę uzyskać dane binarne dołączone do części MIME. – anothershrubery

2

Jestem w 90% pewny, że pracuję nad tym samym projektem, co wy. Ta prośba o mydło jest trochę zbyt znajoma :-)

Przebyliśmy tam większość drogi, przełączając się na WCF i zasadniczo ręcznie kodując obiekt żądania (tworzenie klas, które pasują do formatu mydła, a następnie użycie atrybutów xmlelement udekorować go tak, aby wyglądał jak jego prośba o mydło, sam plik jest zadeklarowany jako Byte() w klasie Attachment i również ozdobiony xmlelementem).

Oto, jak wygląda kontrakt WCF i część modelu danych. Rzeczywisty model danych zawiera kilka dodatkowych klas (obszar aplikacji, obszar danych, zadanie itp.), Ale daje to wystarczająco dużo informacji o strukturze. Ważnym elementem jest plik jako bajt(). Tutaj jest w Vb.net ...

Public Class WarrantyClaim 
    <XmlElement(Order:=0)> Public OEMClaimNumber As String = "" 
    <XmlElement(Order:=1, namespace:="http://www.gm.com/2006/GWM")> Public Attachment As New Attachment 
End Class 

Public Class Attachment 
    <XmlElement(Order:=0)> Public File As Byte() 
    <XmlElement(Order:=1)> Public Filename As String 
End Class 

<ServiceContract(XmlSerializerFormat()> _ 
Public Interface IService 
    <OperationContract(action:="http://www.starstandards.org/webservices/2005/10/transport/operations/ProcessMessage/v1_01/ProcessAttachment")> _ 
    Sub ProcessMessage(ByVal payload As WarrantyClaim) 
End Interface 

Następnie masz klienta WCF, to prawie tak samo, jak wszystkich klientów WCF.

Public Class GmgwClient 
    Inherits System.ServiceModel.ClientBase(Of IService) 
    Implements IService 

    Public Sub New() 
     MyBase.New() 
    End Sub 
    Public Sub New(ByVal configName As String) 
     MyBase.New(configName) 
    End Sub 
    Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) 
     MyBase.New(binding, remoteAddress) 
    End Sub 

    Public Sub ProcessMessage(ByVal payload As Payload) Implements IService.ProcessMessage 
     MyBase.Channel.ProcessMessage(payload) 
    End Sub 
End Class 

Wreszcie masz app.config. Oto magia, ponieważ mówimy WCF, aby użyć Mtom do wysłania wiadomości. Spowoduje to pobranie Bajty() i oddzielenie jej do osobnej sekcji MIME, zastępując ją przez XOP: Uwzględnij. Zauważ, że na razie wysyłam go przez localhost, więc widzę żądanie za pomocą tcpTrace. Możesz google to ta aplikacja, ale zasadniczo przechwyci żądanie, abyśmy mogli zobaczyć, jak to wygląda. I setup tcptrace do nasłuchu na porcie 84.

<system.serviceModel> 
    <bindings> 
    <wsHttpBinding> 
     <binding name="WsHttpMtomBinding" messageEncoding="Mtom"> 
     <security mode="None"> 
      <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" /> 
     </security> 
     <reliableSession enabled="false" /> 
     </binding> 
    </wsHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost:84/ProcessMessage" binding="wsHttpBinding" bindingConfiguration="WsHttpMtomBinding" contract="MyAppNameSpace.IService" name="preprod"/> 
    </client> 
</system.serviceModel> 

Wreszcie, oto rzeczywisty wezwanie do klienta WCF, aby wniosek.

Dim x As New WarrantyClaim 
x.OEmClaimNumber = "12345" 
x.Attachment = New Attachment 
x.Attachment.Filename = "sample.gif" 
x.Attachment.File = IO.File.ReadAllBytes("C:\sample.gif") 

Dim y As New GmgwClient("preprod") 
y.ProcessMessage(x) 

A oto ślad, który przeszliśmy przez tcpTrace. Ma podstawową strukturę i udało się wyciągnąć dane binarne z xml i umieścić je w osobnej sekcji MIME.

POST /ProcessMessage HTTP/1.1 
MIME-Version: 1.0 
Content-Type: multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:501aa27d-9dd1-4f8a-b56d-3fbf327e7be6+id=1";start-info="application/soap+xml" 
VsDebuggerCausalityData: uIDPoysDMCv023ZIjK0Cpp504ooAAAAA//jfaCaohkab2Zx/EU7gpLZDcUldWtlGr1j4ZnrfKl4ACQAA 
Host: localhost:84 
Content-Length: 55125 
Expect: 100-continue 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 


--uuid:501aa27d-9dd1-4f8a-b56d-3fbf327e7be6+id=1 
Content-ID: <http://tempuri.org/0> 
Content-Transfer-Encoding: 8bit 
Content-Type: application/xop+xml;charset=utf-8;type="application/soap+xml" 

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
    <s:Header> 
    <a:Action s:mustUnderstand="1">http://www.starstandards.org/webservices/2005/10/transport/operations/ProcessMessage/v1_01/ProcessAttachment</a:Action> 
    <a:MessageID>urn:uuid:a85374e6-c8ca-4328-ad32-6e8b88a5ca59</a:MessageID> 
    <a:ReplyTo> 
     <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
    </a:ReplyTo> 
    <a:To s:mustUnderstand="1">http://localhost:84/ProcessMessage</a:To> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport"> 
     <payload xsi:type="gwm:WarrantyClaimExtended"> 
     <OEMClaimNumber>12345</OEMClaimNumber> 
     <Attachment xmlns="http://www.gm.com/2006/GWM"> 
      <File> 
      <xop:Include href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634618782531246992" xmlns:xop="http://www.w3.org/2004/08/xop/include"/> 
      </File> 
      <Filename>sample.gif</Filename> 
     </Attachment> 
     </payload> 
    </ProcessMessage> 
    </s:Body> 
</s:Envelope> 
--uuid:501aa27d-9dd1-4f8a-b56d-3fbf327e7be6+id=1 
Content-ID: <http://tempuri.org/1/634618782531246992> 
Content-Transfer-Encoding: binary 
Content-Type: application/octet-stream 

GIF89a<BinaryStuff> 

Tak jak wspomniałem wcześniej - nadal mamy pewne problemy. Brakuje tagów w nagłówku Soap Header ... ale myślę, że będziemy w stanie to rozgryźć. Prawdziwy problem polega na tym, że Content-ID NIE ma formatu, który akceptuje nasz partner - oczekują one czegoś takiego jak < [email protected]>, a .net formatuje je jako http://tempuri.org/1/634618782531246992. Powoduje to awarię programu obsługi sieci Web, ponieważ nie wie, jak odczytać identyfikator Esc ukryty w wiadomości dotyczącej mydła.

+0

Mój adres e-mail można zobaczyć w moim profilu. – anothershrubery

+0

Właśnie zauważyłem twoją edycję dla tego teraz. Tak, to wygląda dokładnie na ten sam projekt! Niestety twoje rozwiązanie nie zadziała w naszym przypadku, ponieważ ograniczamy się do korzystania z GPW, a nie WCF ... Reliance na VS 2005. To jest ból. Ale tego właśnie szukam, ale muszę znaleźć rozwiązanie na GPW. :(Jednak z twoim problemem, nie możesz ustawić Content-ID na wszystko, co chcesz? Działa to w SoapUI, kiedy sam określasz content-ID i nie polegasz na domyślnej reprezentacji? Mój adres e-mail, nie działa jeden, jest w moim profilu, jeśli chcesz dalej rozmawiać – anothershrubery

0

OK, więc dostałem go, aby zaakceptować dane z pliku w elemencie <gwm:File>. Jest to bez użycia XOP, więc wniosek teraz wygląda:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <soap:Header> <payloadManifest xmlns="http://<examplePayload>"> <manifest contentID="Content0" namespaceURI="http://<exampleManifest>" element="ProcessRepairOrder" version="2.01" /> </payloadManifest> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>2011-12-19T15:25:13Z</wsu:Created> <wsu:Expires>2011-12-19T15:30:00Z</wsu:Expires> </wsu:Timestamp> <wsse:UsernameToken><wsse:Username>username</wsse:Username><wsse:Password>password</wsse:Password></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><ProcessMessage xmlns="<examplePayload"><payload><content id="Content0"> <s:ProcessRepairOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.xsd" xmlns:s="http://<exampleManifest>" xmlns:gwm="http://example"> 
    <s:ApplicationArea> 
     <s:Sender> 
      <s:Component>Test</s:Component> 
      <s:Task>ProcessAttachment</s:Task> 
      <s:CreatorNameCode>Test</s:CreatorNameCode> 
      <s:SenderNameCode>XX</s:SenderNameCode> 
      <s:DealerNumber>111111</s:DealerNumber> 
      <s:DealerCountry>GB</s:DealerCountry> 
     </s:Sender> 
     <s:CreationDateTime>2010-03-26T13:37:05Z</s:CreationDateTime> 
     <s:Destination> 
      <s:DestinationNameCode>GM</s:DestinationNameCode> 
      <s:DestinationURI/> 
      <s:DestinationSoftwareCode>GWM</s:DestinationSoftwareCode> 
     </s:Destination> 
    </s:ApplicationArea> 
    <s:DataArea xsi:type="gwm:DataAreaExtended"> 
     <s:Process/> 
     <s:RepairOrder> 
      <s:Header xsi:type="gwm:RepairOrderHeaderExtended"> 
       <s:DocumentId/> 
      </s:Header> 
      <s:Job xsi:type="gwm:JobExtended"> 
       <s:JobNumber/> 
       <s:OperationId>Test</s:OperationId> 
       <s:OperationName/> 
       <s:CodesAndComments/> 
       <s:Diagnostics/> 
       <s:WarrantyClaim xsi:type="gwm:WarrantyClaimExtended"> 
        <s:OEMClaimNumber>00112233445566778899</s:OEMClaimNumber> 
        <gwm:Attachment> 
         <gwm:File>[email protected]�</gwm:File> 
         <gwm:Filename>test.gif</gwm:Filename> 
        </gwm:Attachment> 
       </s:WarrantyClaim> 
       <s:LaborActualHours>0.0</s:LaborActualHours> 
       <s:Technician/> 
      </s:Job> 
     </s:RepairOrder> 
    </s:DataArea> </s:ProcessRepairOrder> </content></payload></ProcessMessage></soap:Body></soap:Envelope> 

Kiedy przeszedł do SoapUI działa to doskonale, jednak w kodzie to nie daje odpowiedzi, ale zgłasza błąd mówiący Response is not well-formed XML. z wewnętrznym wyjątkiem WSE1608: No XOP parts were located in the stream for the specified content-id: <rootpart*[email protected]>

Będę otwierać nowe pytanie dotyczące tego, ponieważ jest to z technicznego punktu widzenia inna sprawa.

Inne pytanie można znaleźć na Soap response, not well formed XML, no XOP parts located, using WSE

0

jestem zaangażowany w dokładnie tym samym projekcie i mam takie same problemy jak omawiane w tym wątku! Używam rozszerzeń vb 2005 i WSE 3.0, a ja działałem, nawet na razie to jest ból. Podczas zapisywania zawartości pliku bezpośrednio we właściwości pliku załącznik zostanie zaakceptowany przez partnera. W moim przypadku dotyczy to prawie wszystkich transakcji z wyjątkiem PRA. Tutaj odpowiedź jest pozytywna, a AttachmentID zostanie dostarczony, ale załącznik nie pojawi się w transakcji.

Oto przykład z sekcji Załącznik:

   <gwm:Attachment> 
        <gwm:File>/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ...</gwm:File> 
        <gwm:Filename>intro2.jpg</gwm:Filename> 
       </gwm:Attachment> 

Jeżeli ustawić RequireMtom dla Służby True, ja otrzymuję następujący błąd:

Das Präfix '' kann nicht von '' in 'http://www.starstandards.org/webservices/2005/10/transport' innerhalb desselben Startelementtags neu definiert werden.

Z jednej strony, to działa, z drugiej strony, nie jestem pewien, czy zostanie wysłany z elementami XOP.

+0

Miałem dyskusję z twórcami usług internetowych na temat umieszczania danych bezpośrednio w elemencie '' i powiedzieli, że to nie jest zgodne z ich specyfikacją i wymagają elementu '' Zobacz http://stackoverflow.com/questions/8805095/soap-response-not-well-formed-xml-no-xop-parts-located-using-wse dla dalszego opisu problemu, który mamy. Chcę porozmawiać dalej poza tym, proszę zobaczyć mój profil na mój adres e-mail – anothershrubery

+0

Oczywiście ... ale nie mogę znaleźć Twojego adresu e-mail –

+0

Jeśli nie widzisz go pod bio, jest teraz w sekcji O mnie mój pr ofile. – anothershrubery