C# 为什么在XML文档中会出现错误?

C# 为什么在XML文档中会出现错误?,c#,web-services,c#-4.0,soapui,asmx,C#,Web Services,C# 4.0,Soapui,Asmx,我在本地主机上有一个soap Web服务,即使用visual studio的iis express。我使用SOAPUI发送它的值。如果我传递了正确的值,它就会工作并进行调试 但是,如果我传递了一个空标记或值,即如果需要一个datetime,并且我传递了一个空标记,即,那么它甚至在命中webservices方法之前就抛出了错误 那么这是webservice错误还是soapui错误呢 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/so

我在本地主机上有一个soap Web服务,即使用visual studio的iis express。我使用SOAPUI发送它的值。如果我传递了正确的值,它就会工作并进行调试

但是,如果我传递了一个空标记或值,即如果需要一个datetime,并且我传递了一个空标记,即,那么它甚至在命中webservices方法之前就抛出了错误

那么这是webservice错误还是soapui错误呢

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <soap:Fault>
         <soap:Code>
            <soap:Value>soap:Sender</soap:Value>
         </soap:Code>
         <soap:Reason>
            <soap:Text xml:lang="en">System.Web.Services.Protocols.SoapException: Server was unable to read request. ---> System.InvalidOperationException: There is an error in XML document (41, 34). ---> System.FormatException: String was not recognized as a valid DateTime.
   at System.DateTimeParse.ParseExactMultiple(String s, String[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)
   at System.DateTime.ParseExact(String s, String[] formats, IFormatProvider provider, DateTimeStyles style)
   at System.Xml.Serialization.XmlCustomFormatter.ToDate(String value)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read3_Item(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read10_Item(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read11_DT_FunctionalLocation(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read12_SI_FunctionalLocation_In_Async()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()</soap:Text>
         </soap:Reason>
         <soap:Detail/>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

soap:发送方
System.Web.Services.Protocols.SoapException:服务器无法读取请求。-->System.InvalidOperationException:XML文档(41,34)中有错误。-->System.FormatException:未将字符串识别为有效的日期时间。
位于System.DateTimeParse.ParseExactMultiple(字符串s、字符串[]格式、DateTimeFormatInfo dtfi、DateTimeStyles样式)
在System.DateTime.ParseExact(字符串s、字符串[]格式、IFormatProvider提供程序、DateTimeStyles样式)
位于System.Xml.Serialization.XmlCustomFormatter.ToDate(字符串值)
位于Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read3_项(布尔值可为null,布尔值检查类型)
位于Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read10_项(布尔值可为空,布尔值检查类型)
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read11_DT_FunctionalLocation(布尔值可为空,布尔值检查类型)
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read12_SI_FunctionalLocation_In_Async()中
在Microsoft.Xml.Serialization.GenerateAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader)中
在System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader XmlReader,字符串编码样式,XmlDeserializationEvents)
---内部异常堆栈跟踪的结束---
在System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader XmlReader,字符串编码样式,XmlDeserializationEvents)
在System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()中
---内部异常堆栈跟踪的结束---
在System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()中
在System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()中

我不会称之为webservice或soapUI错误:该服务按预期工作,拒绝无效内容


在定义Web服务的WSDL中,将有一个XML模式,Web服务运行时环境可以根据该模式验证传入的请求。如果请求未能通过这第一道防线,那么调用您的服务就没有意义。

您的soap需要一个datetime参数,您可能没有提供它,或者它的格式不正确。如果我从任何测试应用程序或类似的程序中传递datetime.Min,它不会抛出错误。但是在SOAPUI中它是这样的。我需要在代码中处理它,还是它是一种行为?它是这样的,不能进一步更改,因为这是客户端提供给我们的wsdl,用于制作Web服务。我的问题是,为什么它在转到Web服务之前甚至失败。例如,在SOAPUI中如何编写datetime,您知道是否可以“捕获”请求失败时的错误?这可以在IIS中完成吗?我想做的是显示一条自定义错误消息,甚至返回一个不同的状态代码