asmx WebService坚持在其他具有可空参数的类中调用的方法

时间:2011-03-30 21:21:27

标签: c# web-services asmx

我试图通过采用可以为空的几个方法/属性来简化在winform和webapp(由其他人编写)之间共享的库中的一些代码,但是从来没有在/ null中传递可空值的值进入不可空的。

这在winform应用程序中运行良好,并且webapp没有任何编译时间问题,但是当我第一次运行它时,它报告错误,它无法找到所采用的方法的旧版本{{ 1}}参数,尽管传递的值是不可为空的DateTime? s。当我添加了带有DateTime参数的重载时,由于属性已从DateTime?更改为int?,因此仅在代码中的其他位置生成错误。

在确认带有int参数的重载可以作为修复工作之后,我对重载进行了评论,试图找出它为什么坚持调用该版本。在某些时候我正在摆弄它(做强制重建等),它突然停止生成错误,即使我将两个.cs文件还原到它们最初失败的版本。此时它正在运行,但我不知道最初出了什么问题或者它是如何修复的,而且我非常谨慎地继续,直到我知道发生了什么。

近似错误消息(来自内存): DateTime?

实际错误讯息: Method not found: 'null NameSpace.StaticClass.StaticMethod( IFoo foo, IBar[] bar, DateTime? padStart, DateTime? padEnd )'. 1 NameSpace.OtherClass.get_Number()'。`

MyWebService.asmx中的方法:

Method not found: 'System.Nullable

StaticClass中的方法:

   [WebMethod( EnableSession = true )]
    public string DoStuff( string jsonFoo, string startDate, string endDate )
    {
        try
        {
            IFoo foo = Deserialize<IFoo>( jsonFoo );

                IBar[] bar = null;

                DateTime padStart = DateTime.Parse(startDate);
                DateTime padEnd = DateTime.Parse(endDate);


                StaticClass.StaticMethod( foo, bar, padStart, padEnd );
        }
    }

2 个答案:

答案 0 :(得分:1)

为了首先清除明显的问题 - 您是否重建了针对该服务构建的任何客户端代理/存根?客户端代码仍然可以生成对v1服务定义的服务请求,而不是闪亮的新v2服务请求。只是一个想法?

答案 1 :(得分:1)

听起来这只是.NET运行时如何在网站项目中处理动态编译的问题。在Web应用程序中,您必须在进行更改时重建它,并将整个应用程序编译为.dll,就像其他项目一样。在具有动态编译的网站中,运行时基本上决定了页面如何分成.dll以及何时需要重建。由于您的情况涉及静态方法,听起来像是一个单独的项目/ .dll,但您站点中的页面从未更改过,运行时可能只是从未重新链接到更新的.dll。然后,如果在某个时候你对页面进行了更改,导致它被重新编译,它会突然识别静态类中的新方法。当然,在这一点上,它只是在猜测;)

如果您再遇到这样的问题,我建议您在解决方案资源管理器中右键单击网站并执行“重建”

相关问题