如果Date Property是DateTime.MinValue,则启用AJAX的WCF服务失败

时间:2012-05-02 08:41:47

标签: asp.net vb.net wcf

如果启用AJAX的WCF应该返回一个Date属性为Nothing的Object,则对此服务的请求失败。

Test.svc

Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports System.Runtime.Serialization

<ServiceContract(Namespace:="WebApp")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class Test

   <OperationContract()>
   <WebGet()>
   Public Function TestOperation() As CompositeType
      Dim obj As New CompositeType
      obj.DateProp = Nothing
      obj.StringProp = "Test"
      Return obj
   End Function

End Class

<DataContract()>
Public Class CompositeType
   <DataMember()>
   Public Property DateProp() As Date
   <DataMember()>
   Public Property StringProp() As String

End Class
Testform.aspx上的

脚本标签

<script type="text/javascript">
   $(document).ready(function () {
      $.getJSON('./Test.svc/TestOperation', function (data) {
         alert(data.d.DateProp);
      });
   });
</script>

Web.config(serviceModel部分)

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="WebApp.TestAspNetAjaxBehavior">
                <enableWebScript />
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>   
        <service name="WebApp.Test">
        <endpoint address="" behaviorConfiguration="WebApp.TestAspNetAjaxBehavior"
        binding="webHttpBinding" contract="WebApp.Test" />
        </service>
    </services>
</system.serviceModel>

Chrome在此调用中显示以下错误消息:“无法加载资源”。

有没有人对此行为有任何解释/想法,您应该如何防止此问题?

感谢您的建议;)

1 个答案:

答案 0 :(得分:1)

如果您希望能够将Nothing分配到DateTime字段,则应将其置为可空:

<DataMember()>
Public Property DateProp() As Nullable(Of DateTime)

我不是VB.NET专家,但据我所知,VB.NET中的Date关键字是DateTime结构的别名(不可为空),除了VB。 NET必须做一些黑巫术魔法才能让你为它分配任何东西。除了当序列化程序尝试将其序列化为JSON时,抛出以下异常:

  

尝试序列化参数时出错   Web应用程序:TestOperationResult。 InnerException消息是'DateTime   值大于DateTime.MaxValue或小于   转换为UTC时的DateTime.MinValue无法序列化   JSON。“。有关详细信息,请参阅InnerException。