我得到的错误是:
参数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'.
我已经在其他项目中使用了此服务引用和相同的方法而没有问题。
答案 0 :(得分:0)
生成服务引用时,可以选择在引用的程序集中重用类型。检查是否已启用此选项。
右键单击服务引用,选择配置服务引用... ,选中重用引用程序集中的类型,然后选择重用所有引用程序集中的类型,然后点击确定。
另外,@ marc_s的注释是正确的 - 您应该避免使用内置的.NET类型(不是原生XML类型) - 但前提是您希望服务可以互操作(即可用)到非WCF客户端。)