2008-11-12 22 views
12

Aquí está mi problema. Estoy accediendo a un servicio web (alojado en un servidor basado en Java) que solo aceptará solicitudes codificadas por texto, pero devuelve respuestas MTOM. Lo que he encontrado es que si configuro el servicio web en RequireMtom, ¡envía una solicitud de Mtom! Lamentablemente, el servidor ahoga una solicitud Mtom y devuelve un error 500. Sin embargo, si configuro la codificación del mensaje de texto, la respuesta vuelve correctamente con una respuesta MIME (MTOM) multiparte que daña la API del servicio web de Microsoft (error de muestra a continuación). Espera una respuesta de texto codificado porque la solicitud fue codificada por texto. Me gustaría RequireMtom en la respuesta solamente. ¿Me puede ayudar alguien?¿Cómo mezclo los tipos de codificación de mensaje (Texto/MTOM) en la solicitud de cliente de Solicitud y respuesta de un servicio web utilizando WCF (o WSE 3)?

Como puede ver en el error siguiente (que ocurre con la API de servicios web estándar, WCF o WSE3), cuando envío la solicitud con codificación de texto, la respuesta vuelve correctamente con todos los datos en una multiparte/respuesta relacionada, pero el marco de .net estrangula!

mensaje de error con WSE:

Client found response content type of 'multipart/related; type="text/xml"; start="<1AE0B46A85B0186B5D136D12E1EE286E>"; boundary="----=_Part_209564_1891070135.1226526701833"', but expected 'text/xml'. 
The request failed with the error message: 

at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 
    at TestWseService.AdesaJasperWse.ManagementServiceService.runReport(String requestXmlString) in C:\Documents and Settings\xxx\My Documents\Visual Studio 2005\Projects\TestWseService\Web References\AdesaJasperWse\Reference.cs:line 229 
    at TestWseService.Form1.buttonRunService_Click(Object sender, EventArgs e) in C:\Documents and Settings\xxx\My Documents\Visual Studio 2005\Projects\TestWseService\Form1.cs:line 42 

mensaje de error con WCF

The content type multipart/related; type="text/xml"; start="<30ED8FE3004CDA67723CC7164A6CFEEC>"; boundary="----=_Part_209545_389093169.1226526546805" of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: 

Server stack trace: 
    at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException) 
    at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
    at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) 
    at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Solicitud (con codificación de mensajes de texto):

POST /jasperserver-pro/services/repository HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
VsDebuggerCausalityData: uIDPo7V2+runH+xGudbec7ueUU8AAAAA7H9vL3stlkCBofMgLa5DWkQOHHpBdy1Ek6P6nXx7FpsACQAA 
SOAPAction: "" 
Authorization: Basic amFzcGVyYWRtaW46akBzcDNyQGRtJW4= 
Host: reports.dev.xxx.com 
Content-Length: 789 
Expect: 100-continue 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><q1:runReport xmlns:q1="http://axis2.ws.jasperserver.jaspersoft.com"><requestXmlString xsi:type="xsd:string">&lt;request operationName="runReport" locale="en"&gt;&#xD; 
&lt;argument name="RUN_OUTPUT_FORMAT"&gt;HTML&lt;/argument&gt;&#xD; 
&lt;resourceDescriptor name="" wsType="" uriString="/BusinessIntelligence/MOS/Reports/dotnettest" isNew="false"&gt;&#xD; 
&lt;label&gt;null&lt;/label&gt;&#xD; 
&lt;parameter name="testparam"&gt;1&lt;/parameter&gt;&#xD; 
&lt;/resourceDescriptor&gt;&#xD; 
&lt;/request&gt;</requestXmlString></q1:runReport></s:Body></s:Envelope> 

Respuesta (con texto de codificación de mensajes):

HTTP/1.1 200 OK 
Date: Wed, 12 Nov 2008 21:49:04 GMT 
Server: IBM_HTTP_Server 
Surrogate-Control: no-store 
Set-Cookie: JSESSIONID=0000z5pH1xEMyulueASctjru2qe:13kftunf6; Path=/ 
Expires: Thu, 01 Dec 1994 16:00:00 GMT 
Cache-Control: no-cache="set-cookie, set-cookie2" 
Content-Length: 2580 
Content-Type: multipart/related; type="text/xml"; start="<30ED8FE3004CDA67723CC7164A6CFEEC>"; boundary="----=_Part_209545_389093169.1226526546805" 
Content-Language: en-US 


------=_Part_209545_389093169.1226526546805 
Content-Type: text/xml; charset=UTF-8 
Content-Transfer-Encoding: binary 
Content-Id: <30ED8FE3004CDA67723CC7164A6CFEEC> 

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:runReportResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://axis2.ws.jasperserver.jaspersoft.com"><runReportReturn xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; 
&lt;operationResult version=&quot;2.0.1&quot;&gt; 
    &lt;returnCode&gt;&lt;![CDATA[0]]&gt;&lt;/returnCode&gt; 
&lt;/operationResult&gt; 
</runReportReturn></ns1:runReportResponse></soapenv:Body></soapenv:Envelope> 
------=_Part_209545_389093169.1226526546805 
Content-Type: text/html 
Content-Transfer-Encoding: binary 
Content-Id: <report> 

<html> 
<head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <style type="text/css"> 
    a {text-decoration: none} 
    </style> 
</head> 
<body text="#000000" link="#000000" alink="#000000" vlink="#000000"> 
<table width="100%" cellpadding="0" cellspacing="0" border="0"> 
<tr><td width="50%">&nbsp;</td><td align="center"> 

<a name="JR_PAGE_ANCHOR_0_1"/> 
<table style="width: 595px" cellpadding="0" cellspacing="0" border="0" bgcolor="white"> 
<tr> 
    <td><img alt="" src="images/px" style="width: 35px; height: 1px;"/></td> 
    <td><img alt="" src="images/px" style="width: 189px; height: 1px;"/></td> 
    <td><img alt="" src="images/px" style="width: 253px; height: 1px;"/></td> 
    <td><img alt="" src="images/px" style="width: 118px; height: 1px;"/></td> 
</tr> 
<tr valign="top"> 
    <td colspan="4"><img alt="" src="images/px" style="width: 595px; height: 20px;"/></td> 
</tr> 
<tr valign="top"> 
    <td><img alt="" src="images/px" style="width: 35px; height: 30px;"/></td> 
    <td valign="middle"><span style="font-family: Arial; font-size: 12.0px; font-weight: bold;">The value of the parameter is:</span></td> 
    <td valign="middle"><span style="font-family: Arial; background-color: #FFFFFF; font-size: 12.0px; font-weight: bold;">1</span></td> 
    <td><img alt="" src="images/px" style="width: 118px; height: 30px;"/></td> 
</tr> 
<tr valign="top"> 
    <td colspan="4"><img alt="" src="images/px" style="width: 595px; height: 20px;"/></td> 
</tr> 
</table> 

</td><td width="50%">&nbsp;</td></tr> 
</table> 
</body> 
</html> 

------=_Part_209545_389093169.1226526546805-- 

Solicitud (con MtoM codificación de mensajes):

POST /jasperserver-pro/services/repository HTTP/1.1 
MIME-Version: 1.0 
Content-Type: multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:fafcdca7-94f7-4884-a8d4-5c6d50dbe8ef+id=1";start-info="text/xml" 
VsDebuggerCausalityData: uIDPo+cN2kKX2odFuUVaER0j60gAAAAAmfYaGH7Ow0WQOcwhebh5pqmDl29omcVOtwVGa10IWewACQAA 
SOAPAction: "" 
Authorization: Basic amFzcGVyYWRtaW46akBzcDNyQGRtJW4= 
Host: reports.dev.xxx.com 
Content-Length: 1031 
Expect: 100-continue 


--uuid:fafcdca7-94f7-4884-a8d4-5c6d50dbe8ef+id=1 
Content-ID: <http://tempuri.org/0> 
Content-Transfer-Encoding: 8bit 
Content-Type: application/xop+xml;charset=utf-8;type="text/xml" 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><q1:runReport xmlns:q1="http://axis2.ws.jasperserver.jaspersoft.com"><requestXmlString xsi:type="xsd:string">&lt;request operationName="runReport" locale="en"&gt;&#xD; 
&lt;argument name="RUN_OUTPUT_FORMAT"&gt;HTML&lt;/argument&gt;&#xD; 
&lt;resourceDescriptor name="" wsType="" uriString="/BusinessIntelligence/MOS/Reports/dotnettest" isNew="false"&gt;&#xD; 
&lt;label&gt;null&lt;/label&gt;&#xD; 
&lt;parameter name="testparam"&gt;1&lt;/parameter&gt;&#xD; 
&lt;/resourceDescriptor&gt;&#xD; 
&lt;/request&gt;</requestXmlString></q1:runReport></s:Body></s:Envelope> 
--uuid:fafcdca7-94f7-4884-a8d4-5c6d50dbe8ef+id=1-- 

Respuesta (con MtoM codificación de mensajes):

HTTP/1.1 500 Internal Server Error 
Date: Wed, 12 Nov 2008 21:47:42 GMT 
Server: IBM_HTTP_Server 
Surrogate-Control: no-store 
$WSEP: 
Set-Cookie: JSESSIONID=0000_iMrdp-TnK9FG3jZFzjx_hA:13kftunf6; Path=/ 
Expires: Thu, 01 Dec 1994 16:00:00 GMT 
Cache-Control: no-cache="set-cookie, set-cookie2" 
Content-Length: 12 
Connection: close 
Content-Type: text/html;charset=UTF-8 
Content-Language: en-US 

Error 500: 

Aquí hay un enlace que apoya la teoría de que Microsoft no soporta codificaciones mixtos:

WSE 3.0: MTOM response mandatory for MTOM request?

UHG!

+1

Cuidado: WSE está obsoleto. WCF debe usarse para todo el desarrollo futuro de servicios web, y el código WSE existente debe migrarse o retirarse lo antes posible. –

Respuesta

0

Aquí hay una respuesta que recibí en otro foro. básicamente dice que el problema es con Axis2 en el lado de Java. Desafortunadamente, eso no está bajo mi control en este caso.

cherry111 - Publicado el sábado, 15 de noviembre de , 2008 12:52:08 AM

Usted necesita cambiar la configuración de su servicio web AXIS2. Puede saber puede habilitar MTOM en dos lugares. Uno está en service.xml y el otro está en axis.xml. Java recomienda que establezca en service.xml, pero al cliente .net wse3.0 no le gusta. Si habilita MTOM en axis.xml, debería funcionar.

1

Investigué un poco sobre esto y la mala noticia es que, desde el punto de vista de WCF, la solicitud y la respuesta DEBEN usar el mismo descubrimiento. Entonces sí, la respuesta anterior es bastante correcta. Debe organizarse con el proveedor del servicio para habilitar MTOM tanto en la solicitud como en la respuesta. La solicitud MTOM no tendrá ningún impacto en su aplicación, aparte de cambiar el tipo SOAP mime, hasta donde yo sé.

0

Sí WCF tiene ese requisito obligatorio y NO, porque se puede trabajar alrededor de ella como lo hice.

Escribí un MultiContentTypeMessageEncoder que encapsula 3 codificadores diferentes text, mtom y fi. También planeo encapsular un codificador gpb si es posible y si hay una buena razón para hacerlo, en el futuro

-2

[WSE 3.0] Puede definir una nueva clase que hereda de su objeto proxy WSE3 con una sola anulación método GetWebResponse.

En el método GetWebResponse, puede simplemente elegir si desea usar la codificación mtom de acuerdo con el tipo de contenido de la respuesta.

Después de eso, debe usar esta clase proxy en lugar de la generada.

PD: La clase de proxy WSE3 debe generarse utilizando wsewsdl3 como un Cliente Web (agregue esta opción/tipo: webClient a la línea de recomendación).

Referencia: http://www.codeproject.com/Tips/46257/Solution-to-WSE-error-for-WSE-clients-needing.

Cuestiones relacionadas