将DateTime反序列化为WCF SOAP服务C#上的参数的异常

时间:2016-04-27 23:41:12

标签: c# wcf parsing datetime soap

在本地环境中开发了一个具有两个WCF服务的系统并在另一个环境中对其进行测试后,我们最终将其部署到生产环境中,但显示了完全不同的错误。这两个服务在四台不同的计算机上运行(每个服务在两台具有负载平衡的计算机上运行)。

InvokeEventWithParameters操作不起作用:

[ServiceContract]
public interface IAccountManager
{
    [OperationContract]
    int InvokeEventWithParameters(string EventName, DateTime InitialDate, DateTime FinalDate, int InitialId, int FinalId, string Username);

    [OperationContract]
    int InvokeEvent(string EventName, string Username);
}

尝试运行服务时,会返回以下错误:

The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'InvokeEventWithParameters'. The value '1/1/2014 12:00:00 AM' cannot be parsed as the type 'DateTime'.

在SOAP消息上,两个服务之间的通信上显示错误。我无法检查服务之间是否发送了ISO 8601,因为它是在生产环境中运行的。我使用嗅探器检查了测试环境,并且ISO正在受到尊重。

有趣的是错误上显示的日期格式,即' en-US',而系统和IIS配置为' pt-BR'它应该按ISO标准格式化。

我已经尝试更改机器文化配置,IIS全球化配置和web.config文件上的文化。这些都没有奏效。我已经检查了整个项目,以及#34; .ToStrings"和" .Parses"在日期时间并没有找到它们,所以没有其他可能的例外来源。

在我看来,SOAP消息的DateTime序列化和反序列化(使用DataContractDeserializer)不应该受到有关文化的任何配置的影响,但是我在google上找到的所有内容都与这些类型的设置有关。我是否正确这个假设?

谢谢你的帮助, 埃米利奥

1 个答案:

答案 0 :(得分:1)

我对客户提出了服务方面的错误,它正在等待日期时间格式,但它正在等待另一个。你能改变那段代码吗?如果是这样,请尝试将收到的日期解析为有效格式:

DateTime.ParseExact(yourDateParam, "M/d/yyyy hh:mm:ss t", new CultureInfo("en-US"));

注意M / d因为我不知道你是否在第(d)天之前寄出月(M)或反之。

快乐的编码!