मैं एक वीएस -2010 एडिन में राइट क्लिक/अपडेट सेवा संदर्भ कमांड "अनुकरण" करना चाहता हूं। मेरे पास (सिल्वरलाइट ...) प्रोजेक्ट का संदर्भ है, मुझे सेवा संदर्भ का नाम और सेवा का यूआरएल पता है।
मुझे यह मिला है: http://dedjo.blogspot.com/2007/03/adding-web-references-to-your-vs.html, लेकिन यह केवल asmx के लिए काम करता है (यह System.ServiceModel के बजाय System.Web.Services का उपयोग करता है), wcf नहीं। क्या कोई विकल्प है लेकिन कोड से svcutil को कॉल करें? यदि हां, तो कैसे? (मैं svcutil का उपयोग करें या slsvcutil करते हैं? मैं इसे कैसे ऐड अंदर से कहते हैं?)
धन्यवादक्या वीएसएफ010 एडिन से डब्ल्यूसीएफ सेवा संदर्भ को रीफ्रेश करना संभव है?
उत्तर
मेरा मानना है कि इस के लिए दृश्य स्टूडियो कमांड है "Project.UpdateServiceReference
"। तो मुझे लगता है कि आप नोड में आपकी रुचि है का चयन करें, और यह आदेश चलाने के लिए, इस तरह करने की कोशिश कर सकते हैं:
envDTE.Windows.Item(vsWindowKindSolutionExplorer).Activate();
envDTE.ActiveWindow.Object.GetItem(@"MyProject\Service References\Proxy").Select(vsUISelectionType.vsUISelectionTypeSelect);
envDTE.ExecuteCommand("Project.UpdateServiceReference");
ओएमजी, धन्यवाद! सोमवार को मैं इसे पहली बार कोशिश करूँगा, यह देखने के लिए कि क्या यह काम करता है! (आपको 50 पुरस्कार देने के लिए ...), हालांकि एक बात: क्या मैं समाधान एक्सप्लोरर में इसे चुनने के बिना सेवा को रीफ्रेश कर सकता हूं? – TDaver
ठीक है, मुझे यह एक काम मिल गया है, और चूंकि मैंने यह निर्दिष्ट नहीं किया है कि चयन नहीं बदला जा सकता है, बल्कि मैंने एक आसान कामकाज लिखा है, इसलिए मैं इसका उपयोग कर सकता हूं, आसान दृष्टिकोण! :) – TDaver
आप ऐसा करने के लिए और अधिक कार्यक्रम संबंधी तरीका ढूंढ रहे हैं, तो आप की तरह कुछ कर सकते हैं निम्नलिखित। इस दृष्टिकोण को डीटीई ऑटोमेशन परत का उपयोग करने की आवश्यकता नहीं है जो उपयोगकर्ता के चयन को बदल देगा और कमांड निष्पादित करेगा। ध्यान दें कि यह एक ISSPProvider के साथ एक VSPackage के संदर्भ में है ताकि यह कोर विजुअल स्टूडियो इंटरफेस आदि के उदाहरण प्राप्त कर सके ...
आप इसे एडिन के भीतर से भी कर सकते हैं, लेकिन you'd need to get an IServiceProvider और माइक्रोसॉफ्ट (कम से कम) माइक्रोसॉफ्ट के संदर्भ जोड़ें। VisualStudio.Shell.Interop.dll और Microsoft.VisualStudio.WCFReference.Interop। इन बाइनरी के लिए संदर्भ असेंबली Visual Studio 2010 SDK में उपलब्ध हैं।
IVsSolution solution = GetService(typeof(SVsSolution)) as IVsSolution;
if (solution != null)
{
IVsHierarchy solutionHierarchy = solution as IVsHierarchy;
if (null != solutionHierarchy)
{
IEnumHierarchies enumHierarchies;
Guid nullGuid = Guid.Empty;
ErrorHandler.ThrowOnFailure(solution.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_ALLINSOLUTION, ref nullGuid, out enumHierarchies));
if (enumHierarchies != null)
{
uint fetched;
IVsHierarchy[] hierarchies = new IVsHierarchy[1];
IVsWCFReferenceManagerFactory wcfReferenceManagerFactory = GetService(typeof(SVsWCFReferenceManagerFactory)) as IVsWCFReferenceManagerFactory;
if (wcfReferenceManagerFactory != null)
{
while (enumHierarchies.Next(1, hierarchies, out fetched) == 0 && fetched == 1)
{
if (wcfReferenceManagerFactory.IsReferenceManagerSupported(hierarchies[0]) == 1)
{
IVsWCFReferenceManager referenceManager = wcfReferenceManagerFactory.GetReferenceManager(hierarchies[0]);
var referenceGroupCollection = referenceManager.GetReferenceGroupCollection();
referenceGroupCollection.UpdateAll(null);
}
}
}
}
}
}
मैं भी दृश्य स्टूडियो 2010 SDK के लिए WCF Service Consumption Tools samples को देख सलाह देते हैं।
धन्यवाद, मैं इसे भी आजमाउंगा! – TDaver
किस वर्ग में GetService विधि है? मैंने आपके द्वारा भेजा गया लिंक पढ़ा है, लेकिन मैं यह नहीं समझ सकता कि डीटीई से IServiceProvider कैसे प्राप्त करें ... – TDaver
मैंने डीटीई को IServiceProvider (कास्ट ऑपरेटर के साथ कास्टिंग करने का प्रयास किया, क्योंकि "जैसा" वापस लौटाया गया है) मुझे ' इंटरफ़ेस 'System.IServiceProvider' टाइप करने के लिए 'System .__ ComObject' प्रकार के COM ऑब्जेक्ट को कास्ट करने में असमर्थ। यह ऑपरेशन विफल हुआ क्योंकि आईआईडी '{8F10F540-7F5D-3F37-8D79-1E0AEB074AA0}' के साथ इंटरफ़ेस के लिए COM घटक पर QueryInterface कॉल निम्न त्रुटि के कारण विफल रहा: ऐसा कोई इंटरफ़ेस समर्थित नहीं है (HRESULT: 0x80004002 (E_NOINTERFACE) से अपवाद) । – TDaver
कोई नहीं? कृपया, यह मेरी कक्षा पीढ़ी एडिन से गायब आखिरी टुकड़ा है ... – TDaver