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

Posted

技术标签:

【中文标题】名为“名称”的操作不符合所需的签名。参数类型必须是实体类型或预定义的可序列化类型之一【英文标题】:Operation named 'name' does not conform to the required signature. Parameter types must be an entity type or one of the predefined serializable types 【发布时间】:2015-04-06 21:40:01 【问题描述】:

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

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

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

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

我还尝试按照此处的建议寻找特定版本的 Ria 服务工具包,但没有运气 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;
        

但是同样的构建错误也报错了。

【问题讨论】:

您使用的是哪个版本的 Visual Studio? 我正在使用 VS2010。我专门为这个项目安装了它。 【参考方案1】:

由于此项目出于某种目的复活,我建议您使用最新的 Visual Studio 并将其移至 Silverlight 5。想法是为什么要处理会坦率地阻碍进程的旧技术.

注释掉那些在你有一个正在运行的(虽然不是可操作的)基线开始之前不起作用的事情。然后把引起问题的东西带回来。

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

【讨论】:

我能理解你来自哪里。它复活的原因之一是解决生产中出现的问题。理想情况下,我希望将其他变量排除在外。 我没有移动 Silverlight 的版本,但安装更高版本的 WCF Ria 服务似乎已经成功了。似乎卸载/重新安装步骤的顺序有所不同,因为我安装了相同的组件组合,但之前无法构建它。 @recursionjm 我有一个最近的 Silverlight项目,客户只是去了一台新机器,并被要求继续使用VS2010,这给我们带来了问题;安装顺序非常神秘。【参考方案2】:

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

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

如果不是这样 - 由于域服务的魔力,服务需要自动生成类类型。仅生成从服务返回的类型。如果域服务没有返回 ImportRecord 类型的 Iqueryable 或 Ienumerable 的方法,您可以创建一个返回 null 的方法 - 这足以生成代码。

这是我最初的两个想法。

编辑:这看起来像我在说什么:previously asked question

【讨论】:

我添加了一个返回空 IQueryable 的方法。但它仍然没有构建,并报告相同的错误。 实体上是否定义了键? 是的,我在 ImportRecord 中定义了一个键。

以上是关于名为“名称”的操作不符合所需的签名。参数类型必须是实体类型或预定义的可序列化类型之一的主要内容,如果未能解决你的问题,请参考以下文章

Django - 获取反转url所需的参数名称

windows 无法启动加载内核所需的DLL文件

从 Swift 2 迁移到 Swift 3 期间的奇怪问题:初始化程序的参数名称与协议所需的名称不同

Terraform AWS 提供商数据源 aws_iam_role 所需的参数“名称”是不是需要角色的路径?

订单结算

与 HTML Web 表单对话所需的参数