क्या cpython (आयरनपीथन नहीं) क्लाइंट का कोई उदाहरण कोड है जो विंडोज कम्युनिकेशन फाउंडेशन (डब्ल्यूसीएफ) सेवा को कॉल कर सकता है?डब्ल्यूसीएफ और पायथन
उत्तर
डब्ल्यूसीएफ को संचार प्रोटोकॉल के माध्यम से कार्यक्षमता का पर्दाफाश करने की आवश्यकता है। मुझे लगता है कि सबसे अधिक इस्तेमाल किया प्रोटोकॉल शायद HTTP पर SOAP है। आइए मान लें कि क्या आप इसका उपयोग कर रहे हैं।
this chapter in Dive Into Python पर एक नज़र डालें। यह आपको दिखाएगा कि कैसे एसओएपी कॉल करें।
मुझे प्रोटोकॉल के बावजूद, पायथन में डब्ल्यूसीएफ सेवा को कॉल करने का कोई एकीकृत तरीका नहीं है।
मुझे केवल काम करने के लिए बुनियादी एचटीपी बाइंडिंग मिल गई। यदि कोई जानता है कि काम करने के लिए wsHttp बाइंडिंग कैसे प्राप्त करें, तो कृपया इसे यहां पोस्ट करें। –
भले ही पाइथन से डब्ल्यूसीएफ को कॉल करने का कोई विशिष्ट उदाहरण न हो, तो आपको डब्ल्यूसीएफ के साथ पूरी तरह से एसओएपी अनुपालन सेवा करने में सक्षम होना चाहिए। तो आपको बस इतना करना है कि पाइथन से सामान्य एसओएपी सेवा को कॉल करने के कुछ उदाहरण मिलते हैं।
सबसे आसान बात WCF में BasicHttp बाइंडिंग का उपयोग करना होगा और फिर आप प्रत्येक अनुरोध और प्रतिक्रिया के साथ सत्र टोकन पास करके अपने सत्रों का समर्थन कर सकते हैं।
मुझे किसी भी प्रत्यक्ष उदाहरण के बारे में पता नहीं है, लेकिन यदि डब्ल्यूसीएफ सेवा आरईएसटी सक्षम है तो आप इसे आरईएसटी (सादा ओल्ड एक्सएमएल) के माध्यम से आरईएसटी विधियों/आदि (यदि सेवा में कोई है) के माध्यम से एक्सेस कर सकते हैं। यदि आप सेवा के नियंत्रण में हैं तो आप आरईएसटी के माध्यम से एंडपॉइंट्स का पर्दाफाश कर सकते हैं।
यदि आपको टीसीपी पर बाइनरी धारावाहिक संचार की आवश्यकता है तो थ्रिफ्ट जैसे समाधान को लागू करने पर विचार करें।
मैंने suds का उपयोग किया।
from suds.client import Client
print "Connecting to Service..."
wsdl = "http://serviceurl.com/service.svc?WSDL"
client = Client(wsdl)
result = client.service.Method(variable1, variable2)
print result
आपको आरंभ करना चाहिए। मैं डब्ल्यूसीएफ और एक विश्वसनीय परत से उजागर सेवाओं से जुड़ने में सक्षम हूं। आपको जो चाहिए उसे करने में मदद करने के लिए कुछ डेटा मालिश करने की आवश्यकता है, खासकर यदि आपको कई नामस्थानों से जुड़ना होगा।
suds.client नामक कोई मॉड्यूल नहीं, आप कहां से सूड प्राप्त करते हैं? –
@ItalyLevin आपको पीआईपी का उपयोग करने की आवश्यकता है। – stephen
मुझे विंडोज 7 – user2258651
बस किसी को डब्ल्यूएसएफ एसओएपी 1.2 सेवा तक पहुंचने में मदद करने के लिए डब्ल्यूएस-एड्रेसिंग के साथ सूड का उपयोग कर। मुख्य समस्या प्रत्येक संदेश में कार्रवाई का नाम इंजेक्ट करना है।
पायथन 3 और सूड पोर्ट https://bitbucket.org/jurko/suds के लिए यह उदाहरण।
उदाहरण HTTP शीर्षलेखों के आधार पर कस्टम प्रमाणीकरण का उपयोग करता है, मैं इसे छोड़ देता हूं।
TODO: स्वचालित रूप से WSDL से api_direct_url प्राप्त करें (अब यह हार्ड कोडित है)।
from suds.plugin import MessagePlugin
from suds.sax.text import Text
from suds.wsse import Security, UsernameToken
from suds.sax.element import Element
from suds.sax.attribute import Attribute
from suds.xsd.sxbasic import Import
api_username = 'some'
api_password = 'none'
class api(object):
api_direct_url = 'some/mex'
api_url = 'some.svc?singleWsdl|Wsdl'
NS_WSA = ('wsa', 'http://www.w3.org/2005/08/addressing')
_client_instance = None
@property
def client(self):
if self._client_instance:
return self._client_instance
from suds.bindings import binding
binding.envns = ('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
api_inst = self
class _WSAPlugin(MessagePlugin):
def marshalled(self, context):
api_inst._marshalled_message(context)
self._client_instance = Client(self.api_url,
plugins=[_WSAPlugin()],
headers={'Content-Type': 'application/soap+xml',
'login':api_username,
'password': api_password}
)
headers = []
headers.append(Element('To', ns=self.NS_WSA).setText(self.api_direct_url))
headers.append(Element('Action', ns=self.NS_WSA).setText('Blank'))
self._client_instance.set_options(soapheaders=headers)
cache = self._client_instance.options.cache
cache.setduration(days=10)
return self._client_instance
def _marshalled_message(self, context):
def _children(r):
if hasattr(r, 'children'):
for c in r.children:
yield from _children(c)
yield c
for el in _children(context.envelope):
if el.name == 'Action':
el.text = Text(self._current_action)
return
_current_action = None
def _invoke(self, method, *args):
try:
self._current_action = method.method.soap.action.strip('"')
return method(*args)
finally:
self._current_action = None
def GetRequestTypes(self):
return self._invoke(self.client.service.GetRequestTypes)[0]
def GetTemplateByRequestType(self, request_type_id):
js = self._invoke(self.client.service.GetTemplateByRequestType, request_type_id)
return json.loads(js)
def GetRequestStatus(self, request_guid):
return self._invoke(self.client.service.GetRequestStatus, request_guid)
def SendRequest(self, request_type_id, request_json):
r = json.dumps(request_json, ensure_ascii=False)
return self._invoke(self.client.service.SendRequest, request_type_id, r)
टी एल; डॉ: wsHttpBinding (सोप 1.2) के लिए उपयोग करने zeep
मामले किसी में WCF और wsHttpBinding के साथ परेशानी का उपयोग कर झाग (या उस बात के लिए झाग-Jurko) चल रहा है (जो सोप 1.2):
- झाग
- झाग-Jurko लगता मृत तरह-की काफी मर चुका है (यहां तक कि अजगर 3 पर इसे स्थापित रंज नहीं कर सकता)। 0.6 रिलीज में बहुत ही कष्टप्रद अनंत रिकर्सन बग है (कम से कम हमारी सेवा द्वारा उजागर डब्लूएसडीएल पर) जो टिप में तय है लेकिन यह जारी नहीं है और यह 1 रहा है।आखिरी प्रतिबद्धता के बाद 5 साल (इस लेखन के समय फरवरी 17 में)।
यह पायथन 3 पर काम करता है लेकिन SOAP 1.2 का समर्थन नहीं करता है। Sovetnikov's answer इसे 1.2 के साथ काम करने का प्रयास है लेकिन मैंने इसे मेरे लिए काम नहीं करने में कामयाब रहा है। - जीप जाने और बॉक्स से बाहर काम करने का वर्तमान तरीका प्रतीत होता है (मैं जीप से संबद्ध नहीं हूं, यह सिर्फ मेरे लिए काम करता है और मैंने एक ईंट की दीवार के खिलाफ अपने सिर को टक्कर मारने में कई घंटे बिताए हैं जो सूड काम करने की कोशिश कर रहे हैं) । काम करने के लिए जीप के लिए, डब्ल्यूसीएफ सेवा होस्ट कॉन्फ़िगरेशन में wsHttp बाइंडिंग नोड के तहत < सुरक्षा मोड = "कोई नहीं"/> शामिल होना चाहिए।
क्या आप wsHttp बाइंडिंग को कार्यान्वित करने के लिए एक उदाहरण जोड़ सकते हैं, अटक गया घंटों के लिए इसे कार्यान्वित नहीं किया जा सकता है। – harshil9968
@ harshil9968: 100% सुनिश्चित नहीं है कि आप क्या कर रहे हैं। एक जीप क्लाइंट को इंस्टेंट करना 'क्लाइंट = जीप.क्लिएंट' (http: // computerip: port/myservice /? wsdl ')। डब्ल्यूसीएफ सेवा कार्यान्वयन कैसे बनाया जाए इस प्रश्न – ChrisWue
के लिए दायरे से थोड़ा सा है यह एचटीएमएल-बाइंडिंग के साथ बनाता है, wshttp-binding नहीं। मुझे त्रुटि मिल रही है उस वजह से ग्राहक। – harshil9968
- 1. डब्ल्यूसीएफ सेवा, डब्ल्यूसीएफ आरआईए सेवाओं, और डब्ल्यूसीएफ डेटा सेवा
- 2. डब्ल्यूसीएफ और एमटीओएम
- 3. डब्ल्यूसीएफ सेवा और थ्रेडिंग
- 4. डब्ल्यूसीएफ और केर्बेरोज प्रमाणीकरण
- 5. एमएसएमक्यू और डब्ल्यूसीएफ सेवा
- 6. डब्ल्यूसीएफ, सुरक्षा और प्रमाणपत्र
- 7. डब्ल्यूसीएफ और जावा
- 8. डब्ल्यूसीएफ डेटासर्विसेज और ओडाटा
- 9. डब्ल्यूसीएफ और .NET 4.0
- 10. डब्ल्यूसीएफ और सिंक फ्रेमवर्क
- 11. डब्ल्यूसीएफ दोष और अपवाद
- 12. डब्ल्यूसीएफ और इंटरफेस पैरामीटर्स
- 13. डब्ल्यूसीएफ और साबुन 1.1
- 14. डब्ल्यूसीएफ सेवा पुस्तकालय और डब्ल्यूसीएफ सेवा आवेदन के बीच अंतर
- 15. डब्ल्यूसीएफ - डोमेन ऑब्जेक्ट्स और IExtensibleDataObject
- 16. डब्ल्यूसीएफ कॉलबैक और नेटवर्क यातायात
- 17. आरएसटी डब्ल्यूसीएफ सेवा और एएसपी.नेट
- 18. डब्ल्यूसीएफ और 127.0.0.1 बनाम लोकलहोस्ट
- 19. डब्ल्यूसीएफ और प्रमाणपत्र (पारस्परिक प्रमाणीकरण)
- 20. डेल्फी एसओएपी लिफाफा और डब्ल्यूसीएफ
- 21. डब्ल्यूसीएफ आर्किटेक्चर, और उत्क्रांति, संस्करण
- 22. डब्ल्यूसीएफ और एमएसएमक्यू विफलता हैंडलिंग
- 23. डब्ल्यूसीएफ दोनों http और https
- 24. सेवा ब्रोकर और डब्ल्यूसीएफ इंटरऑपरेबिलिटी
- 25. डब्ल्यूसीएफ: सर्विसहोस्ट (डब्ल्यूसीएफ 4.5)
- 26. डब्ल्यूसीएफ (और पेशेवर और विपक्ष) क्या है?
- 27. डब्ल्यूसीएफ और एमएसएमक्यू और ट्रांजैक्शनस्कोप लंबी प्रक्रिया
- 28. नामांकित और वैकल्पिक पैरामीटर, और डब्ल्यूसीएफ
- 29. डब्ल्यूसीएफ: डब्ल्यूसीएफ टेस्ट क्लाइंट
- 30. डब्ल्यूसीएफ
क्या हम सुरक्षित रूप से मान सकते हैं कि आप HTTP पर SOAP- या REST- आधारित सेवा कॉल करने का प्रयास कर रहे हैं? मुझे पाइथन के बीच कुछ प्रकार के COM पुल से कम संदेह है और डब्लूसीएफ क्लाइंट सफलतापूर्वक टीसीपी डब्ल्यूसीएफ सेवा को कॉल करने में सक्षम होगा। – technomalogical