0

在我的 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);
}

有什么方法可以“强制”生成忠实于原始方法签名的代理?

4

3 回答 3

2

我会考虑更改您的服务以返回具有 2 个属性的数据结构,并从您的操作中返回它,而不是使用 out 参数。

于 2013-05-02T19:56:25.053 回答
1

我相信这是代理生成代码的限制。您必须在客户端编辑生成的代理代码才能更改此设置。

于 2013-05-02T19:53:58.857 回答
0

从技术上讲,它是忠实的。如果你深入研究 Reference.cs,你会发现当代理调用你的服务时,调用是一样的。但是,调用服务的代理或“包装器”决定以不同的方式“包装”您的服务调用。

使代理本身保持相同签名的唯一方法是自己编写。这与人们在反映 DLL 时遇到的问题完全相同。当然,您可以反映它并获得“源代码”,但反映的代码将与原始源代码不同,尽管功能相同。

于 2013-05-02T20:18:27.087 回答