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

标签 c# wcf

我得到的错误是:

Argument 2: cannot convert from 'System.Tuple[]' to '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'.

我已经在其他项目中使用了这个服务引用和相同的方法,没有任何问题。

最佳答案

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

右键单击服务引用,选择配置服务引用...,勾选Reuse types in referenced assemblies并选择Reuse types in all referenced assemblies strong>,然后单击确定

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

关于c# - 为什么使用错误的方法签名生成 Reference.cs(WCF 服务引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38701764/

相关文章:

c# - 创建并上传到 Azure Blob 存储中的特定文件夹

c# - 在 WCF 服务中重命名 __type-field

c# - (WCF - C#) 返回包含不同自定义类集合的自定义类

c# - 使用 C# 的 SQL Azure 数据库备份和还原

没有 csproj 的 C# 9 顶级程序?

c# - 在没有代理客户端的情况下使用 WCF 服务

wcf - 获取WCF的客户端IP地址,操作后

c# - Windows 窗体调用 Web 服务但需要模拟不同的 Windows 用户

c# - WPF 链绑定(bind)

c# - AspNetCore 设置内容根路径