6

पर अतिरिक्त पैरामीटर जोड़ने की शक्तियां क्यों हैं, मैं कमांड लाइन से कुछ डब्ल्यूसीएफ वेबसाइटों को पिंग करने के लिए पावरहेल का उपयोग करने की कोशिश कर रहा हूं। जैसेवेब सेवा विधि हस्ताक्षर

मैं एक WCF ऑपरेशन

[OperationContract] 
string DoWork(string name); 

है और मैं PowerShell का उपयोग के साथ कि कॉल कर सकते हैं।

$proxy = New-WebServiceProxy -Uri 'http://localhost/TestService/Service.svc' 
$proxy.DoWork('Hello World') 

यह तब तक ठीक काम करता है जब इनपुट पैरा और रिटर्न प्रकार स्ट्रिंग होते हैं। हालांकि अगर मैं पूर्णांक प्रस्तुत करता हूं, जेनरेट की गई विधि हस्ताक्षर & रिटर्न प्रकारों में अतिरिक्त पैरामीटर निर्दिष्ट गुण उत्पन्न होते हैं।

डेटा अनुबंध रिटर्न प्रकार के साथ निम्न विधि पर विचार करें।

[DataContract] 
public class SimpleClass 
{ 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public int Count { get; set; } 
} 

... 

[OperationContract] 
SimpleClass DoWorkD(string name, int howMany); 

समस्या 1

विधि के हस्ताक्षर गलत है & एक अतिरिक्त पैरामीटर bool howManySpecified है।

$proxy = New-WebServiceProxy -Uri 'http://localhost/TestService/Service.svc' 
$method = $proxy | Get-Member -Name DoWorkD 
$method.Definition 

Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy3alhost_TestService_Service_svc.SimpleClass, -nv8lxgh, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null DoWorkD(string name, int howMany, bool howManySpecified) 

समस्या 2

DataContract वर्ग के लिए लौट आए प्रॉक्सी भी गैर स्ट्रिंग गुणों के लिए अतिरिक्त XXXSpecified गुण है।

______________________________________________________________________ 
PS D:\Work\Sandbox\Powershell> $proxy.DoWorkD("Hello World", 10, $true") 

Count  CountSpecified Name        
-----  -------------- ----        
10     True Hello World 

समस्या 3

वापसी प्रकार के रूप में एक आदिम प्रकार की स्थापना सिर्फ पूरी तरह से unintuitive व्यवहार है। एक सरल विधि जो एक पूर्णांक देता है एक सिस्टम के रूप में बाहर आता है। शून्य विधि, जिसका परिणाम रेफरी पैरामीटर के माध्यम से उपलब्ध हैं।

[OperationContract] 
int DoWorkE(int a, int b, int c, int d); 

PS D:\Work\Sandbox\Powershell> $proxy.DoWorkE(1,$true, 2,$true,3,$true,4,$true, [ref] $intresult, [ref] $intresultPresent) 
$intresult 
10 

PS D:\Work\Sandbox\Powershell> ($proxy | Get-Member -Name DoWorkE).Definition 
System.Void DoWorkE(int a, bool aSpecified, int b, bool bSpecified, int c, bool cSpecified, int d, bool dSpecified, System.Int32& DoWorkEResult, System.Boolean& DoWorkEResultSpecified) 

यह डिज़ाइन द्वारा है। मैं उलझन में हूं कि इन अतिरिक्त specified पैरा की आवश्यकता क्यों है और यदि नहीं, तो उन्हें हटाया जा सकता है और इंट-परिणाम-दर-रेफ केवल विचित्र

धन्यवाद अगर कोई इस डिज़ाइन/व्यवहार पर कोई प्रकाश डाल सकता है।

उत्तर

5

इस सवाल का मैं एक लंबे समय पहले पूछा पढ़ें:

Strange behaviour calling method of wcf from powershell using new-webproxyservice

आप आपरेशन अनुबंध अतिरिक्त bool मानकों से बचने के लिए करने के लिए [XmlSerializerFormat] जोड़ने की जरूरत है।

+0

धन्यवाद। क्या इसका किसी भी अन्य .NET क्लाइंट अनुप्रयोगों पर कोई प्रतिकूल प्रभाव पड़ेगा जो पहले से ही सेवा को कॉल कर रहे हैं। क्या यह एक "ब्रेकिंग" विशेषता है। क्या उन्हें अंत बिंदु के खिलाफ पुन: संकलित करने की आवश्यकता होगी? –

+0

मैंने विशेषता को जोड़ने के बाद, मेरे डब्ल्यूसीएफ को अपने सभी क्लाइंट अनुप्रयोगों (सभी .NET 2.0 या 4.0 में) में कोई बदलाव नहीं किया है। लेकिन मैंने इसे केवल .NET ऐप और पावरहेल के साथ परीक्षण किया है। –

+0

ठीक है धन्यवाद ईसाई –