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

C# asmx WebService坚持在其他类中调用具有可为空参数的方法,c#,web-services,asmx,C#,Web Services,Asmx,我试图简化winform和webapp(由其他人编写)之间共享的库中的一些代码,方法是采用几个可为null的方法/属性,但这些方法/属性的可为null的值从未传入/null从未被消耗到不可为null的方法/属性中 这在winform应用程序中运行良好,webapp没有任何编译时问题,但当我第一次运行它时,它未能报告一个错误,即它找不到使用DateTime?参数的方法的旧版本,尽管传递的值不可为nullDateTimes。当我添加回带有DateTime?参数的重载时,由于属性已从int?更改为in

我试图简化winform和webapp(由其他人编写)之间共享的库中的一些代码,方法是采用几个可为null的方法/属性,但这些方法/属性的可为null的值从未传入/null从未被消耗到不可为null的方法/属性中

这在winform应用程序中运行良好,webapp没有任何编译时问题,但当我第一次运行它时,它未能报告一个错误,即它找不到使用
DateTime?
参数的方法的旧版本,尽管传递的值不可为null
DateTime
s。当我添加回带有
DateTime?
参数的重载时,由于属性已从
int?
更改为
int
,它只会在代码的其他地方生成错误

在确认带有
DateTime?
参数的重载可以修复后,我对重载进行了注释,试图找出它坚持调用该版本的原因。在我摆弄它的某个时候(执行强制重建等),它突然停止生成错误,即使我已将这两个.cs文件恢复到它们最初失败的版本。在这一点上,它的工作,但我不知道什么出了问题,最初或它是如何修复,我非常谨慎继续,直到我知道发生了什么

近似错误消息(来自内存): 未找到方法:'null NameSpace.StaticClass.StaticMethod(IFoo foo,IBar[]bar,DateTime?padStart,DateTime?padEnd);

实际错误消息: 未找到方法:“System.Nullable1 NameSpace.OtherClass.get_Number()”`

MyWebService.asmx中的方法:

   [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 );
        }
    }

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

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


但是,如果您再次遇到类似问题,我建议您在解决方案资源管理器中右键单击该网站并执行“重建”

是您提到的正在使用的webapp的.asmx webservice,或者您的web应用程序引用了进行更改的web服务?这是visial studio中正在构建和运行的解决方案的一部分。我想这可能是很明显的事情,我在.net中的体验几乎完全是桌面应用程序。如果您的网站有对asmx服务的web引用,并且asmx服务也发生了更改,然后必须更新web引用。我已经有一段时间没有处理web项目了,所以我不记得具体细节了,但是当您进行重建与构建时,可能会发生这种情况。您也可以右键单击web引用并选择“更新web引用”选项(或确切的名称)。AFAIK站点所需的一切都包含在解决方案中。完全有可能这根本不是问题,只是为了消除它,我会按照Joel C在OP评论中的建议,在解决方案中对客户端项目的web引用进行更新。除非visual studio的较新版本允许webreference位于webreference文件夹之外,否则不会有任何web引用。所有web部件(服务器和客户端)都位于单个项目中。业务逻辑层和数据层分离;但这就是之前的开发人员所分离出来的东西。我只是尝试通过回归来测试这一点(将静态类切换为使用DateTime?、将asmx切换为通过DateTime?)。尽管进行了重建,然后进行了清理,然后进行了重建;它仍然失败,因为它正在寻找一个使用DateTime的方法版本。我最后尝试更改默认端口并重新启动VisualStudio本身,但仍然没有成功。
    public static void StaticMethod( IFoo foo, IBar[] bar, DateTime padStart, DateTime padEnd )
    {
    }