2013-05-02 53 views
0

在我的WCF的Web服務,我有以下接口:WCF方法的參數順序

[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

另請參閱:http://stackoverflow.com/questions/11294971/how-can-i-prevent-an-out-parameter-to-end-up-return-parameter-in-a-wcf-web- Servi大街 – 2014-05-03 04:06:59

回答

0

從技術上講,它是忠實的。如果您深入瞭解Reference.cs,您會看到當代理呼叫您的服務時,呼叫是相同的。但是,調用該服務的代理或「包裝器」決定以不同方式「包裝」服務調用。

使代理本身保持相同簽名的唯一方法是自己寫。這是人們在反映DLL時的完全相同的問題。當然你可以反映它並獲得「源代碼」,但反射的代碼將與原始源代碼不同,但功能相同。

1

我相信這是代理生成代碼的限制。您必須在客戶端中編輯生成的代理代碼才能更改此代碼。

2

我會考慮將您的服務更改爲返回具有2個屬性的數據結構,並將其從您的操作中返回,而不是使用輸出參數。