在我的WCF Web服务中,我有以下界面:
[ServiceContract]
public interface ITestService
{
[OperationContract]
void TestMethod(out int param1, out int param2);
}
当我在客户端添加服务引用时,生成的客户端方法与原始签名不正确,它将out
参数之一映射为方法返回。我必须这样称呼它:
using (var client = new TestServiceClient())
{
int param2;
int param1 = client.TestMethod(out param2);
}
有什么方法可以“强制”生成的代理忠实于原始方法签名吗?
答案 0 :(得分:2)
我会考虑更改您的服务以返回包含2个属性的数据结构,并从您的操作中返回它,而不是使用输出参数。
答案 1 :(得分:1)
我认为这是代理生成代码的限制。您必须在客户端中编辑生成的代理代码才能更改此内容。
答案 2 :(得分:0)
从技术上讲,它是忠实的。如果您深入了解Reference.cs,您将看到当代理呼叫您的服务时,呼叫是相同的。但是,调用服务的代理或“包装器”决定以不同方式“包装”您的服务调用。
使代理本身保持相同签名的唯一方法是自己编写。这与人们在反映DLL时遇到的问题完全相同。当然你可以反映它并获得“源代码”,但反映的代码将与原始源不同,尽管功能将是相同的。