के साथ एकाधिक डब्ल्यूसीएफ सेवाओं के लिए क्लाइंट-साइड कोड कैसे उत्पन्न करें मेरे पास कई डब्ल्यूसीएफ सेवाएं हैं जो कुछ डेटा अनुबंध साझा करती हैं और svcutil.exe का उपयोग करके क्लाइंट-साइड कोड उत्पन्न करने की आवश्यकता होती है। मैंने ऐसा करने के दो सबसे स्पष्ट तरीकों का उपयोग करके त्रुटियों में भाग लिया है और कुछ मदद की ज़रूरत है।साझा प्रकार
लेकिन पहले, यहाँ सेवाएं हैं:,
[DataContract(Namespace = "http://www.me.com/shared/")]
public class Request {
[DataMember]
public int Input { get; set; }
}
[DataContract(Namespace = "http://www.me.com/shared/")]
public class Response {
[DataMember]
public int Result { get; set; }
}
सेवाओं कुछ तुच्छ तरह से लागू किया जाता है, संकलित प्रकाशित - चलो:
[ServiceContract(Namespace = "http://www.me.com/services/")]
public interface IFooService {
[OperationContract]
Response RunFoo(Request request);
}
[ServiceContract(Namespace = "http://www.me.com/services/")]
public interface IBarService {
[OperationContract]
Response RunBar(Request request);
}
रिस्पांस और अनुरोध एक अलग विधानसभा में परिभाषित कर रहे हैं अब ग्राहक पक्ष में स्विच करें।
svcutil कमांड लाइन पर दोनों सेवाओं सहित- इस तरह:
svcutil /o:Client.cs http://hostname.com/FooService.svc http://hostname.com/BarService.svc
, दोहराया डेटा प्रकार के बारे में कई त्रुटि संदेश में परिणाम होगा
Error: There was a validation error on a schema generated during export: Source: Line: 1 Column: 9087 Validation Error: The global element ' http://schemas.microsoft.com/2003/10/Serialization/:anyType ' has already been declared.
के साथ शुरू और
के साथ समाप्तError: There was a validation error on a schema generated during export: Source: Line: 1 Column: 12817 Validation Error: The complexType ' http://www.me.com/shared/:Response ' has already been declared.
प्रत्येक सेवा के लिए अलग-अलग क्लाइंट-साइड फ़ाइल जेनरेट करना इन त्रुटियों है:
svcutil /o:Foo.cs http://hostname.com/FooService.svc
svcutil /o:Bar.cs http://hostname.com/BarService.svc
लेकिन तब साझा प्रकार (जैसे अनुरोध और प्रतिक्रिया के रूप में) की परिभाषा Foo.cs में और उसके बाद Bar.cs में दोहराया जाएगा, संकलक त्रुटियों में स्पष्ट रूप से हो जाती है।
तो, ऐसी सेवाओं का उपभोग करने वाले क्लाइंट-साइड कोड उत्पन्न करने का पारंपरिक तरीका क्या है?
सीमाएं:
- ग्राहक के लिए साझा प्रकार युक्त
- "सेवा संदर्भ जोड़ें ..." आदेश का उपयोग नहीं कर सकते हैं (ताकि वे svcutil.exe के/आर विकल्प इस्तेमाल कर सकते हैं) एक विधानसभा नहीं भेज सकते विजुअल स्टूडियो में - एक svcutil कमांड लाइन (या एक अन्य कमांड लाइन उपकरण) की आवश्यकता है।
लेकिन यह एक या स्थिति नहीं है। कमांडलाइन पर svcutil करने के लिए कई अंतिमबिंदुओं निर्दिष्ट करके, आप आउटपुट फाइलों कि कई सेवाओं में DTOs पुन: उपयोग का एक सेट उत्पन्न कर सकते हैं। सेवा पक्ष से असेंबली का पुन: उपयोग करने की कोई आवश्यकता नहीं है, और प्रत्येक सेवा के लिए एक ही वस्तु की अपनी प्रतियों की आवश्यकता नहीं है। – Bevan