1
我referncing從我的.NET項目在PHP創建SOAP服務,我有編碼的一些問題,並能夠使用這個庫CustomTextMessageEncoder,https://code.msdn.microsoft.com/vstudio/Invoking-a-web-service-9714e53e/sourcecode?fileId=75606&pathId=391881754 https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/custom-message-encoder-custom-text-encoderSOAP CustomTextMessageEncoder
我的網絡來解決這些問題。配置看起來像這樣
<binding name="WSCalculadoraBinding" >
<customTextMessageEncoding encoding="ISO-8859-1"
messageVersion="Soap11"/>
<httpTransport />
</binding>
它的工作原理主要是很好的,但對於一些特定的數據,它將引發此異常
{
"Message": "Error.",
"ExceptionMessage": "Error al deserializar el cuerpo del mensaje de respuesta para la operación 'wsCotizar'.",
"ExceptionType": "System.ServiceModel.CommunicationException",
"StackTrace": "\r\nServer stack trace: \r\n en System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)\r\n en System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)\r\n en System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)\r\n en System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters)\r\n en System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc& rpc)\r\n en System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)\r\n en System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)\r\n en System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)\r\n en System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)\r\n\r\nException rethrown at [0]: \r\n en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)\r\n en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)\r\n en Cognos.Services.Baneco.Calculadora.WSCalculadoraPortType.wsCotizar(String login, String password, String tipodependencia, Int32 ingresos, String categoria, String otroscreditos, String cuotas, String alquiler, String tipobien, Int32 montobien, String moneda, Int32 monto, String tasa, Int32 plazo)\r\n en Cognos.Services.Baneco.Calculadora.WSCalculadoraPortTypeClient.wsCotizar(String login, String password, String tipodependencia, Int32 ingresos, String categoria, String otroscreditos, String cuotas, String alquiler, String tipobien, Int32 montobien, String moneda, Int32 monto, String tasa, Int32 plazo) en E:\\_Git\\Cognos.Services\\Service References\\Baneco.Calculadora\\Reference.cs:línea 231\r\n en Cognos.Services.Calculadora.Calculadora.Cotizar(String tipodependencia, Int32 ingresos, String categoria, String otroscreditos, String cuotas, String alquiler, String tipobien, Int32 montobien, String moneda, Int32 monto, String tasa, Int32 plazo) en E:\\_Git\\Cognos.Services\\Calculadora\\Calculadora.cs:línea 26\r\n en Cognos.Library.Baneco.Calculadora.Cotizar(String tipodependencia, Int32 ingresos, String categoria, String otroscreditos, String cuotas, String alquiler, String tipobien, Int32 montobien, String moneda, Int32 monto, String tasa, Int32 plazo) en E:\\_Git\\Cognos.Library\\Baneco\\Calculadora.cs:línea 20\r\n en Cognos.Negocio.Api.Controllers.Calculadora.CalculadoraController.Cotizar(String tipodependencia, Int32 ingresos, String categoria, String otroscreditos, String cuotas, String alquiler, String tipobien, Int32 montobien, String moneda, Int32 monto, String tasa, Int32 plazo) en E:\\_Git\\Cognos.Negocio.Api\\Controllers\\Calculadora\\CalculadoraController.cs:línea 19\r\n en lambda_method(Closure , Object , Object[])\r\n en System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n en System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n en System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n en System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n en System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n en System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n en System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n en System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()\r\n--- Fin del seguimiento de la pila de la ubicación anterior donde se produjo la excepción ---\r\n en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n en System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
"InnerException": {
"Message": "Error.",
"ExceptionMessage": "Error en el documento XML (1, 771).",
"ExceptionType": "System.InvalidOperationException",
"StackTrace": " en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)\r\n en System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)",
"InnerException": {
"Message": "Error.",
"ExceptionMessage": "La cadena de entrada no tiene el formato correcto.",
"ExceptionType": "System.FormatException",
"StackTrace": " en System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)\r\n en System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)\r\n en System.Xml.Serialization.XmlSerializationReader.ReadTypedPrimitive(XmlQualifiedName type, Boolean elementCanBeType)\r\n en System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)\r\n en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderWSCalculadoraPortType.Read1_Resp_Cotizar()\r\n en System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)\r\n en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderWSCalculadoraPortType.Read5_wsCotizarResponse()\r\n en Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Deserialize(XmlSerializationReader reader)\r\n en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)"
}
}
}