2010-06-10 13 views
25

अब मैं एनटीएलएम प्रमाणीकरण के आसपास एक .NET सेवा के लिए एक वेब सेवा क्लाइंट के रूप में अपाचे सीएक्सएफ का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है, लेकिन मुझे आश्चर्य है कि क्यों मैं वेब सेवा लक्ष्य एंडपॉइंट सेट करने में सक्षम नहीं हूं। ऐसा लगता है कि सीएक्सएफ कुछ अजीब कारणों से रनटाइम पर डब्लूएसडीएल चाहता है - यकीन नहीं है। यह डब्लूएसडीएल से भौतिक अंतराल लेता है, जो मुझे लगता है कि परीक्षण वातावरण में ठीक काम करता है, लेकिन तैनाती के समय पर यह बदलना निश्चित है।डायनेमिक एंडपॉइंट्स के लिए अपाचे सीएक्सएफ क्लाइंट

यहाँ कुछ कोड प्रदर्शित करने के लिए है:

 MyWebServices service = new MyWebServices(); 
     MyWebServicesSoap port = service.getMyWebServicesSoap12(); 

     // Turn off chunking so that NTLM can occur 
     Client client = ClientProxy.getClient(port); 
     HTTPConduit http = (HTTPConduit) client.getConduit(); 
     HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
     httpClientPolicy.setConnectionTimeout(36000); 
     httpClientPolicy.setAllowChunking(false); 
     http.setClient(httpClientPolicy); 

     port.doSomethingUseful(); 

फिर, वहाँ कोई जगह है कि मैं CXF ग्राहक एपीआई कि मुझे सेवा समाप्ति बिंदु स्थापित करने के लिए अनुमति देता है में देख सकते हैं। ऐसा नहीं है कि मैं वैसे भी देख सकता हूं। इस मामले में, लक्ष्य http://localhost/integration/webservices/mywebservices.asmx है, लेकिन मैं कहीं भी हो सकता है। निश्चित रूप से इस पैदल यात्री समस्या को हल किया गया है?

उत्तर

44

निम्नलिखित का प्रयास करें:

MyWebServicesSoap port = service.getMyWebServicesSoap12(); 
BindingProvider provider = (BindingProvider) port; 
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 

वैकल्पिक रूप से, MyWebServices अन्य getXXX तरीकों कि डबल्यूएसडीएल स्थान

+0

यकीन नहीं में कार्य करना के लिए एक यूआरएल ले हो सकता है क्या आपका मतलब है कि आपके पिछले वक्तव्य में – andyczerwonka

+0

माइक्रोसिस क्लास में, क्या अन्य विधियां हैं जो एक पोर्ट पैरामीटर स्वीकार करने वाले पोर्ट को वापस कर देगी? क्या आप उस वर्ग के हस्ताक्षर पेस्ट करने के लिए अपनी पोस्ट संपादित कर सकते हैं? – Kevin

+0

एक आकर्षण की तरह काम करता है - धन्यवाद – andyczerwonka

10

CXF 2.6.1

Client client = ClientProxy.getClient(port); 
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ; 
+0

यह मेरे लिए सीएक्सएफ 2.7.12 में काम नहीं किया। –

संबंधित मुद्दे