名为“name”的操作不符合所需的签名。参数类型必须是实体类型或预定义的可序列化类型之一

时间:2015-02-06 17:04:55

标签: c# wcf silverlight silverlight-4.0 wcf-ria-services

我继承了WCF RIA,Silverlight 4应用程序已经休眠了几年。假设代码是稳定的。为了使它正常工作,我需要安装未记录的依赖项,据我所知。

根据我可以收集的信息安装依赖项后,我留下了以下错误。

  

名为'namereplaced'的操作不符合要求   签名。参数类型必须是实体类型或其中之一   预定义的可序列化类型

我已按照此处的建议尝试卸载Ria服务。 WCF Ria Operation does not conform to the required signature 但这会导致更多错误。

我也试过在这里建议搜索特定版本的Ria Services Toolkit,但没有运气 https://social.msdn.microsoft.com/Forums/silverlight/en-US/86f40859-18e8-4ce6-8d8a-a864fbe4e3ac/error-operation-named-createuser-does-not-conform-to-the-required-signature-parameter-types?forum=silverlightwcf

此外,我尝试在IIS中设置从客户端FTP检索到的drop,并在机器事件日志中看到以下内容

  

:服务   '/AppName/Services/SomeManager-Web-Services-ImportService.svc'不能   由于编译期间的异常而被激活。例外   消息是:名为'namereplaced'的操作不符合   要求的签名。参数类型必须是实体或复杂类型,   一组复杂类型,或预定义的可序列化之一   类型.. ---> System.InvalidOperationException:名为的操作   'namereplaced'不符合要求的签名。参数   类型必须是实体或复杂类型,复杂的集合   类型,或预定义的可序列化类型之一。

但是,使用IT团队在旧开发人员文件中找到的旧安装程序,我能够设置一个不会生成这些错误的网站实例,但与最新版本的数据库不兼容。我还没有在源代码管理中找到安装项目的源代码。

有问题的方法定义如下

 [Invoke(HasSideEffects=true)]
    public void NameReplaced(IEnumerable<ImportRecord> recs)
    {
        foreach (var item in recs)
        {
            UpdateImportRecord(item);
        }
    }

理想情况下,我希望在不尝试更改代码的情况下解决此问题,因为需要对客户端环境中的错误进行调查,然后需要进一步更新。

编辑: 包括Mark W的建议,

 public IQueryable<ImportRecord> GetImportRecords()
        {
            return null;
        }

但报告了相同的构建错误。

2 个答案:

答案 0 :(得分:1)

由于此项目正在复活出于某种目的,我建议您使用最新的Visual Studio并将其移至Silverlight 5.这个想法是为什么要处理旧技术,这将严重阻碍该过程

在你有一个正在运行(不可操作)的基线之前,注释掉那些不起作用的东西。然后带回导致问题的事情。

我说这是因为他在S4和S4中都有过广泛的工作。 S5和坦率地(对代码)没有太大的改变;在这个过程中,是的升级会有问题,但它们并非不可克服。此外,对于S5及更高版本的Visual Studio,安装智能更好。

答案 1 :(得分:0)

我们在未安装RIA服务的服务器上运行RIA服务。我们所做的是使用Copy Local = true发布网站:

  • System.ServiceModel.DomainServices.EntityFramework
  • System.ServiceModel.DomainServices.Hosting
  • System.ServiceModel.DomainServices.Hosting.OData
  • System.ServiceModel.DomainServices.Server

如果不是这样 - 由于域服务的神奇之处,该服务需要自动生成类类型。仅生成从服务返回的类型。如果域服务没有返回Iqueryable或Ienumerable类型的ImportRecord的方法,则可以创建一个返回null的方法 - 这对于代码生成就足够了。

这是我的第一个想法。

编辑:这看起来就像我在谈论的那样:previously asked question