我继承了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;
}
但报告了相同的构建错误。
答案 0 :(得分:1)
由于此项目正在复活出于某种目的,我建议您使用最新的Visual Studio并将其移至Silverlight 5.这个想法是为什么要处理旧技术,这将严重阻碍该过程
在你有一个正在运行(不可操作)的基线之前,注释掉那些不起作用的东西。然后带回导致问题的事情。
我说这是因为他在S4和S4中都有过广泛的工作。 S5和坦率地(对代码)没有太大的改变;在这个过程中,是的升级会有问题,但它们并非不可克服。此外,对于S5及更高版本的Visual Studio,安装智能更好。
答案 1 :(得分:0)
我们在未安装RIA服务的服务器上运行RIA服务。我们所做的是使用Copy Local = true发布网站:
如果不是这样 - 由于域服务的神奇之处,该服务需要自动生成类类型。仅生成从服务返回的类型。如果域服务没有返回Iqueryable或Ienumerable类型的ImportRecord的方法,则可以创建一个返回null的方法 - 这对于代码生成就足够了。
这是我的第一个想法。
编辑:这看起来就像我在谈论的那样:previously asked question