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

时间:2016-08-01 14:43:51

标签: c# wcf

我得到的错误是:

  

参数2:无法转换为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);

我已尝试删除服务参考并重新添加。

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

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

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'.

我已经在其他项目中使用了此服务引用和相同的方法而没有问题。

1 个答案:

答案 0 :(得分:0)

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

右键单击服务引用,选择配置服务引用... ,选中重用引用程序集中的类型,然后选择重用所有引用程序集中的类型,然后点击确定

另外,@ marc_s的注释是正确的 - 您应该避免使用内置的.NET类型(不是原生XML类型) - 但前提是您希望服务可以互操作(即可用)到非WCF客户端。)