WCF 3.0 में क्लाइंट आईपी एड्रेस प्राप्त करना


82

जाहिरा तौर पर आप आसानी से WCF 3.5 में क्लाइंट IP पता प्राप्त कर सकते हैं लेकिन WCF 3.0 में नहीं। किसी को पता है कैसे?

जवाबों:


152

यह 3.0 में आपकी मदद नहीं करता है, लेकिन मैं सिर्फ लोगों को इस सवाल का पता लगाने और निराश होने के कारण देख सकता हूं क्योंकि वे 3.5 में क्लाइंट आईपी एड्रेस प्राप्त करने की कोशिश कर रहे हैं। इसलिए, यहां कुछ कोड काम करने चाहिए:

using System.ServiceModel;
using System.ServiceModel.Channels;

OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint =
    prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;

11
मैं पोस्ट को संपादित नहीं कर सका, लेकिन इसने मुझे एक टन की मदद की, धन्यवाद! उल्लेख करना चाहते हैं कि 2 त्रुटियां हैं। "ऑपरेशनकंटेंट" के बजाय "ऑपरेशनकॉन्टेक्ट" होना चाहिए और "रिमेइंडपॉइंटमेन्सेजप्रोपरेटी" के बजाय "रिमोटएंडपॉइंटमैनेज़प्रॉपर्टी" होना चाहिए।
जेरेमी मुलिन

3
सुरक्षा नोट: यह मान
खराब

@ makerofthings7 मैं MSDN पर देखता हूं, लेकिन क्या यह वास्तव में खराब हो सकता है? अनुरोध में अभी भी एक TCP हैंडशेक है। अगर आईपी सही मायने में खराब हो गया, तो क्या सिंक एक गलत जगह पर नहीं भेजा जाएगा, और इस तरह यह कनेक्शन शुरू होने से पहले ही विफल हो जाएगा?
लागत

1
@ इस पोस्ट में "आईपी" न केवल टीसीपी पैकेट में है, बल्कि डब्ल्यूसीएफ संदेश में भी निवासी है, हालांकि डेटा स्ट्रीम (लेयर 7) में यह पाठ ठीक से सुरक्षित नहीं है '
goodguys_activate

1
@shambulator इस मुद्दे को देखे हुए मुझे कई साल हो चुके हैं, लेकिन निम्नलिखित केबी लेख से लगता है कि यह पोर्ट्स हो सकता है, न कि आइपैडड्रेस। support.microsoft.com/kb/971842
goodguys_activate

36

यह पता चलता है कि जब तक आप (ए) आपकी सेवा को वेब सेवा (जाहिर है) और (बी) में होस्ट कर रहे हैं, आप इस प्रकार से AspNetCompatibility मोड को सक्षम कर सकते हैं:

    <system.serviceModel>
            <!-- this enables WCF services to access ASP.Net http context -->
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
    </system.serviceModel>

और फिर आप द्वारा आईपी पता प्राप्त कर सकते हैं:

HttpContext.Current.Request.UserHostAddress

11
और फिर आप इसे का उपयोग करके प्राप्त करते हैंHttpContext.Current.Request.UserHostAddress
Jader Dias

3
इस पूरे मामले में इस खींचतान के प्रति सचेत रहें
user1496062

15

यदि आप .NET 3.0 SP1 को लक्षित कर रहे हैं, तो आप कर सकते हैं।

OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;

क्रेडिट: http://blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx

संदर्भ: http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx


3
ठीक है, मैं "fe80 :: 3dbc: a2ec" की तरह एक आईपीवी 6 प्राप्त कर रहा हूं। मैं भटक रहा था कि मैं रिमोट आईपी नंबर कैसे प्राप्त कर सकता हूं
जूनियर मेहे जूल

@ makerofthings7 सुरक्षा निर्णय लेते समय हमें क्या उपयोग करना चाहिए?
CSharper
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.