У меня есть этот ответ от веб-сервиса Java:WCF не смог разобрать Java ответ мыло
HTTP/1.1 200 OK
Date: Mon, 23 Apr 2012 12:08:50 GMT
Server: Jetty/5.1.14 (Linux/2.6.18-274.17.1.el5xen x86 java/1.6.0
Content-Type: text/xml; charset=utf-8
Content-Length: 571
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335182931028
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.urn:uuid:[email protected]>
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:loginResponse xmlns:ns1="http://www.telelogic.com/change/types"><token>206398089429929753</token></ns1:loginResponse></soapenv:Body></soapenv:Envelope>
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335182931028--
Исключение из WCF говорит мне The data at the root level is invalid. Line 1, position 1.
Мой app.config выглядит следующим образом:
<customBinding>
<binding>
<!--<messageModifier />-->
<!--<mtomMessageEncoding messageVersion="Soap11" writeEncoding="utf-8" />-->
<textMessageEncoding writeEncoding="utf-8" messageVersion="Soap11" />
<httpsTransport
requireClientCertificate="false"
transferMode="Buffered" />
</binding>
</customBinding>
Как вы можете видеть, я уже пробовал различные настройки, такие как mtom/text encodig, soap11/soap12 для версии сообщений, буферизация и responseStreamed для transferMode. Я как бы застрял. Когда я убираю часть ответа с Fiddler, я получил его работу:
HTTP/1.1 200 OK
Date: Mon, 23 Apr 2012 14:21:44 GMT
Server: Jetty/5.1.14 (Linux/2.6.18-274.17.1.el5xen x86 java/1.6.0
Content-Type: text/xml; charset=utf-8
Content-Length: 571
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:loginResponse xmlns:ns1="http://www.telelogic.com/change/types"><token>206398089429929753</token></ns1:loginResponse></soapenv:Body></soapenv:Envelope>
Я что-то упустил? Есть ли волшебная комбинация настроек конфигурации, в которой я нуждаюсь?
Я также попробовал bot IClientMessageFormatter и IClientMessageInspector, но оба они кажутся слишком высокими в стеке, потому что WCF уже терпит неудачу с сообщением ProtocolException The data at the root level is invalid. Line 1, position 1.
.
Я подключил канал ChannelMessageInterceptor от WCF sample. Я думал, что я получил, что работает, но теперь я получаю исключение из службы Java:
HTTP/1.1 500 Internal Server Error
Date: Mon, 23 Apr 2012 14:40:05 GMT
Server: Jetty/5.1.14 (Linux/2.6.18-274.17.1.el5xen x86 java/1.6.0
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335192006387; type="application/xop+xml"; start="<0.urn:uuid:[email protected]>"; start-info="application/soap+xml"; action="http://www.telelogic.com/change/ChangeService/login/Fault/LoginFault";charset=UTF-8
Content-Length: 2853
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335192006387
Content-Type: application/xop+xml; charset=utf-8; type="application/soap+xml"
Content-Transfer-Encoding: binary
Content-ID: <0.urn:uuid:[email protected]>
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><soapenv:Fault xmlns:axis2ns15="http://www.w3.org/2003/05/soap-envelope"><soapenv:Code><soapenv:Value>axis2ns15:MustUnderstand</soapenv:Value></soapenv:Code><soapenv:Reason><soapenv:Text xml:lang="en-US">Must Understand check failed for header http://www.w3.org/2005/08/addressing : Action</soapenv:Text></soapenv:Reason><soapenv:Detail><Exception>org.apache.axis2.AxisFault: Must Understand check failed for header http://www.w3.org/2005/08/addressing : Action
at org.apache.axis2.engine.AxisEngine.checkMustUnderstand(AxisEngine.java:88)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:137)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:830)
at compressionFilters.CompressionFilter.doFilter(CompressionFilter.java:192)
at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
at com.telelogic.cs.filters.StrutsCharsetFilter.doFilter(StrutsCharsetFilter.java:44)
at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
</Exception></soapenv:Detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335192006387--
По крайней мере, это говорит мне, что они используют ось? Я также видел сообщения об исключении, сообщающие мне, что тип содержимого ответа не соответствует типу привязки, но я не могу воспроизвести их в это время.
Это очень похоже на вопрос this. Я также пробовал WCF Soap With Attachments Encoder, но он также дергает ногами Data at the root level is invalid. Line 1, position 1.
(но теперь прямо внутри исключения XmlException, а не из протоколаException).
Обновление У меня работает WCF SWA!
Пример сообщения, включая вложения:
HTTP/1.1 200 OK
Date: Tue, 24 Apr 2012 11:27:40 GMT
Server: Jetty/5.1.14 (Linux/2.6.18-274.17.1.el5xen x86 java/1.6.0
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335266861287; type="application/xop+xml"; start="<0.urn:uuid:[email protected]>"; start-info="text/xml";charset=UTF-8
Content-Length: 81847
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335266861287
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.urn:uuid:[email protected]>
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:downloadAttachmentResponse xmlns:ns1="http://www.telelogic.com/change/types"><attachmentContents><xop:Include href="cid:1.urn:uuid:[email protected]" xmlns:xop="http://www.w3.org/2004/08/xop/include"></xop:Include></attachmentContents></ns1:downloadAttachmentResponse></soapenv:Body></soapenv:Envelope>
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335266861287
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <1.urn:uuid:[email protected]>
��ࡱ�����������������>���� ����������������������������������������������������������������������������������������������������������������������������������������������
--MIMEBoundaryurn_uuid_14B7343BF98675BB5D1335266861287--
На данный момент я думал о вызове службы с HttpWebRequest, потому что синтаксический гораздо меньше ошибок.
При использовании стандартного MTOM-кодировщика для этого конкретного сообщения оно работает: S Теперь мне нужно динамически переключать энкодеры ?!
Я, наконец, получил его работу. На основе SWA-выборки WCF я создал расширение связывания, которое по умолчанию использует TextMessageEncodingBindingElement, и для отправки сообщений и резервный механизм, используя MtomMessageEncodingBindingElement при приеме многочастных/связанных сообщений.
Спасибо всем.
Как мне скопировать вложение? Зачистка, похоже, выполняет эту работу для операций, которые я использую сейчас, но я не уверен, что это будущее доказательство ... – riezebosch
если структура запросов исправлена, она всегда будет после Content-ID. Если сообщение действительно соответствует некоторому стандарту (например, swa), то wcf swa должен работать. для определения этого нам нужен пример с приложением –
Я обновил вопрос на примере. – riezebosch