2016-10-06 86 views
0

我有一個帶有3個參數的方法的WCF服務:1個輸入和2個輸出。例如。爲什麼在調用WCF服務時必須反轉參數?

Foo(input, out1, out2) 

我在客戶端代碼中添加了服務引用罰款,但是,當我去調用該服務時,visual studio無法正確識別參數。我必須撥打服務

Foo(out1, out2, input) 

這是爲什麼?我可以看到服務引用的參考文件中的順序顛倒了,但如果我更改順序,那麼Visual Studio會給我錯誤,說明它們的順序不正確。這是正常的行爲嗎?我只需要使用反向參數調用服務?

回答

2

...當我去調用服務時,Visual Studio不承認 參數正確

您所遇到的問題是由設計。

當服務將WSDL元數據公開給使用者時,在服務定義中沒有任何地方的服務操作簽名以原始形式維護。

相反,輸入和輸出參數在不同的集合中聲明。

現在,添加服務引用工具的工作是嘗試從元數據重建消費者的原始操作簽名,但在這種情況下它不能。此時,原始的操作簽名已經丟失。因此,它只是重新構建處理輸出參數集合的操作,然後重新輸入參數,從而觀察您的行爲。

讓這個消失的唯一方法是:

  1. 不是在你的服務操作定義中使用的輸出參數。無論如何,建議這樣做,因爲output parameters are a code quality flag並且應儘可能避免,或者
  2. 不公開服務的元數據。消費者可以通過使用WCF channel的實際服務定義類型直接調用該服務,而不是使用服務引用。這通常被認爲是在WCF中調用服務的最佳方法。

或者你什麼也不能做。消費者仍然可以調用服務操作權限?

相關問題