为什么生成Reference.cs(WCF服务引用)时使用了错误的方法签名

本文关键字:错误 方法 Reference cs 引用 服务 WCF 为什么 | 更新日期: 2023-09-27 17:59:46

我得到的错误是:

参数2:无法从"System.Tuple[]"转换为"Tester.CommService.TupleOfstringSqlDbTypeanyTypep2GUUk_Sk[]"

来自以下内容:

CommService.CommServiceClient client = new CommService.CommServiceClient();
Tuple<string, System.Data.SqlDbType, object>[] parameters = new Tuple<string, System.Data.SqlDbType, object>[] { 
    new Tuple<string, System.Data.SqlDbType, object>(
        paramName, 
        System.Data.SqlDbType.Int, 
        projectid)};
client.Open();
string myValue = client.getScalar(procName, parameters);
client.Close();

实际的方法签名是:

string getScalar(string procedure, IEnumerable<Tuple<string, SqlDbType, object>> parameters);

我已经尝试删除服务引用并重新添加它。

我还尝试配置服务引用,取消选中"在引用的程序集中重用类型"选项,然后更新服务引用。

我尝试过使用以下内容,但它也会产生相同的错误。

CommService.ICommService service = new CommService.CommServiceClient();
CommService.getScalarRequest request = new CommService.getScalarRequest(procName, parameters);
service.getScalar(request);

我注意到Reference.cs还包含以下内容:

// CODEGEN: Parameter 'getScalarResult' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.

我在其他项目中使用过这个服务参考和相同的方法,没有问题。

为什么生成Reference.cs(WCF服务引用)时使用了错误的方法签名

生成服务引用时,可以选择重用引用程序集中的类型。检查此选项是否已启用。

右键单击服务引用,选择"配置服务引用…",选中重用引用程序集中的类型并选择在所有引用程序集中重用类型定

此外,@marc_s的评论是正确的——您可能应该避免内置的.NET类型(不是本机XML类型)——但前提是您希望服务具有互操作性(即可用于非WCF客户端)。