{"id":4216,"date":"2022-11-12T14:28:42","date_gmt":"2022-11-12T14:28:42","guid":{"rendered":"https:\/\/serviceobjects.wpaladdin.com\/?page_id=4216"},"modified":"2025-09-27T00:28:34","modified_gmt":"2025-09-27T07:28:34","slug":"gppl2-soap","status":"publish","type":"page","link":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/","title":{"rendered":"GPPL2 &#8211; SOAP"},"content":{"rendered":"\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-create-block-tabs\"><ul class=\"tab-labels\" role=\"tablist\" aria-label=\"tabbed content\"><li class=\"tab-label active\" role=\"tab\" aria-selected=\"true\" aria-controls=\"C#\" tabindex=\"0\">C#<\/li><li class=\"tab-label\" role=\"tab\" aria-selected=\"false\" aria-controls=\"Python\" tabindex=\"0\">Python<\/li><li class=\"tab-label\" role=\"tab\" aria-selected=\"false\" aria-controls=\"NodeJS\" tabindex=\"0\">NodeJS<\/li><\/ul><div class=\"tab-content\">\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p><strong>Phone Exchange C# Code Snippet<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\ufeffusing System;\nusing System.Threading.Tasks;\nusing GPPL2Service;\n\nnamespace geophone_plus_2_dot_net.SOAP\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Provides functionality to call the ServiceObjects GeoPhone Plus 2 SOAP service's GetPhoneInfo operation,\n    \/\/\/ retrieving reverse phone lookup information (e.g., provider, contacts, SMS\/MMS addresses) with fallback to a backup endpoint\n    \/\/\/ for reliability in live mode.\n    \/\/\/ &lt;\/summary>\n    public class GetPhoneInfoValidation\n    {\n        private const string LiveBaseUrl = \"https:\/\/sws.serviceobjects.com\/GPPL2\/api.svc\/GeoPhonePlusSoap\";\n        private const string BackupBaseUrl = \"https:\/\/swsbackup.serviceobjects.com\/GPPL2\/api.svc\/GeoPhonePlusSoap\";\n        private const string TrialBaseUrl = \"https:\/\/trial.serviceobjects.com\/GPPL2\/api.svc\/GeoPhonePlusSoap\";\n\n        private readonly string _primaryUrl;\n        private readonly string _backupUrl;\n        private readonly int _timeoutMs;\n        private readonly bool _isLive;\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Initializes URLs\/timeout\/IsLive.\n        \/\/\/ &lt;\/summary>\n        public GetPhoneInfoValidation(bool isLive)\n        {\n            _timeoutMs = 10000;\n            _isLive = isLive;\n\n            _primaryUrl = isLive ? LiveBaseUrl : TrialBaseUrl;\n            _backupUrl = isLive ? BackupBaseUrl : TrialBaseUrl;\n\n            if (string.IsNullOrWhiteSpace(_primaryUrl))\n                throw new InvalidOperationException(\"Primary URL not set.\");\n            if (string.IsNullOrWhiteSpace(_backupUrl))\n                throw new InvalidOperationException(\"Backup URL not set.\");\n        }\n\n        \/\/\/ &lt;summary>\n        \/\/\/ This is the basic operation for finding the reverse-lookup information.Given a phone number and test type, it will consult national directory-assistance databases to find the owner and address registered.The addresses returned are validated via third party address-validation technique. They are returned to you exactly as the phone carrier releases them.If you need these addresses to be validated, using Service Objects\u2019 AddressValidation web services is highly recommended.Both the contact\u2019s information and the phone company\u2019s information are returned with this operation. Two valuable bits of information are also retrieved \u2013 whether the phone line is for business or residential purposes, and whether the phone line is landline or wireless.By examining the WSDL, you may see that multiple groups of contact\/exchange information are possible. Although they are possible in the XML, you will only see one exchange per output, always.It is common, however, to see multiple contacts per phone number (as people change numbers, or there may be multiple businesses at the same phone number.) It is highly recommended that you handle each of these contacts, rather than just the first contact returned.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"PhoneNumber\">The 10 digit phone number&lt;\/param>\n        \/\/\/ &lt;param name=\"TestType\">The type of validation to perform (\"FULL\", \"BASIC\", or \"NORMAL\").&lt;\/param>\n        \/\/\/ &lt;param name=\"LicenseKey\">Your license key to use the service\n        \/\/\/ &lt;returns>A &lt;see cref=\"Task{PhoneInfoResponse}\"\/> containing a &lt;see cref=\"PhoneInfoResponse\"\/> object with reverse phone lookup details or an error.&lt;\/returns>\n        \/\/\/ &lt;exception cref=\"Exception\">Thrown if both primary and backup endpoints fail.&lt;\/exception>\n        public async Task&lt;PhoneInfoResponse> GetPhoneInfo(string PhoneNumber, string TestType, string LicenseKey)\n        {\n            GeoPhonePlusClient clientPrimary = null;\n            GeoPhonePlusClient clientBackup = null;\n\n            try\n            {\n                \/\/ Attempt Primary_PLL\n                clientPrimary = new GeoPhonePlusClient();\n                clientPrimary.Endpoint.Address = new System.ServiceModel.EndpointAddress(_primaryUrl);\n                clientPrimary.InnerChannel.OperationTimeout = TimeSpan.FromMilliseconds(_timeoutMs);\n\n                PhoneInfoResponse response = await clientPrimary.GetPhoneInfoAsync(\n                    PhoneNumber, TestType, LicenseKey).ConfigureAwait(false);\n\n                if (_isLive &amp;&amp; !IsValid(response))\n                {\n                    throw new InvalidOperationException(\"Primary endpoint returned null or a fatal TypeCode=3 error for GetPhoneInfo\");\n                }\n                return response;\n            }\n            catch (Exception primaryEx)\n            {\n\n                try\n                {\n                    clientBackup = new GeoPhonePlusClient();\n                    clientBackup.Endpoint.Address = new System.ServiceModel.EndpointAddress(_backupUrl);\n                    clientBackup.InnerChannel.OperationTimeout = TimeSpan.FromMilliseconds(_timeoutMs);\n\n                    return await clientBackup.GetPhoneInfoAsync(\n                        PhoneNumber, TestType, LicenseKey).ConfigureAwait(false);\n                }\n                catch (Exception backupEx)\n                {\n                    throw new Exception(\n                        $\"Both primary and backup endpoints failed.\\n\" +\n                        $\"Primary error: {primaryEx.Message}\\n\" +\n                        $\"Backup error: {backupEx.Message}\");\n                }\n                finally\n                {\n                    clientBackup?.Close();\n                }\n            }\n            finally\n            {\n                clientPrimary?.Close();\n            }\n        }\n        private static bool IsValid(PhoneInfoResponse response) => response?.Error == null || response.Error.TypeCode != \"3\";\n    }\n}\n<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p><strong>Phone Exchange Python Code Snippet<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from suds.client import Client\nfrom suds import WebFault\nfrom suds.sudsobject import Object\n\nclass GetPhoneInfoSoap:\n\n    def __init__(self, license_key: str, is_live: bool, timeout_ms: int = 10000):\n        \"\"\"\n        license_key: Service Objects GPPL2 license key.\n        is_live: Whether to use live or trial endpoints\n        timeout_ms: SOAP call timeout in milliseconds\n        \"\"\"\n\n        self._timeout_s = timeout_ms \/ 1000.0  # Convert to seconds\n        self._is_live = is_live\n        self.license_key = license_key\n\n        # WSDL URLs for primary and backup endpoints\n        self._primary_wsdl = (\n            \"https:\/\/sws.serviceobjects.com\/GPPL2\/api.svc?wsdl\"\n            if is_live else\n            \"https:\/\/trial.serviceobjects.com\/GPPL2\/api.svc?wsdl\"\n        )\n        self._backup_wsdl = (\n            \"https:\/\/swsbackup.serviceobjects.com\/GPPL2\/api.svc?wsdl\"\n            if is_live else\n            \"https:\/\/trial.serviceobjects.com\/GPPL2\/api.svc?wsdl\"\n        )\n\n    def get_phone_info(self, phone_number: str, test_type: str) -> Object:\n        \"\"\"\n        Calls the GeoPhone Plus 2 GetPhoneInfo SOAP API to retrieve the information.\n\n        Parameters:\n        phone_number (str): The 10 digit phone number.\n        test_type (str): The type of validation to perform ('FULL', 'BASIC', or 'NORMAL').\n        license_key: Service Objects GeoPhone license key.\n        is_live: whether to use live or trial endpoints\n        timeout_ms: SOAP call timeout in milliseconds\n\n        Returns:\n            Object: Parsed SOAP response with phone information or error details.\n        \"\"\"\n\n        # Common kwargs for both calls\n        call_kwargs = dict(\n            PhoneNumber= phone_number,\n            TestType= test_type,\n            LicenseKey= self.license_key\n        )\n\n        # Attempt primary\n        try:\n            client = Client(self._primary_wsdl, timeout=self._timeout_s)\n            # Override endpoint URL if needed:\n            # client.set_options(location=self._primary_wsdl.replace('?wsdl','\/soap'))\n            response = client.service.GetPhoneInfo(**call_kwargs)\n\n            # If response is None or fatal error code, trigger fallback\n            if response is None or (hasattr(response, 'Error') and response.Error and response.Error.TypeCode == '3'):\n                raise ValueError(\"Primary returned no result or fatal Error.TypeCode=3\")\n\n            return response\n\n        except (WebFault, ValueError, Exception) as primary_ex:\n                try:\n                    client = Client(self._backup_wsdl, timeout=self._timeout_s)\n                    response = client.service.GetPhoneInfo(**call_kwargs)\n\n                    if response is None:\n                        raise ValueError(\"Backup returned no result\")\n\n                    return response\n\n                except (WebFault, Exception) as backup_ex:\n                    # Raise a combined error if both attempts fail\n                    msg = (\n                        \"Both primary and backup endpoints failed.\\n\"\n                        f\"Primary error: {str(primary_ex)}\\n\"\n                        f\"Backup error: {str(backup_ex)}\"\n                    )\n                    raise RuntimeError(msg)\n           <\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p><strong>Phone Exchange NodeJS<\/strong> <strong>Code Snippet<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import { soap } from 'strong-soap';\n\n\/**\n * &lt;summary>\n * A class that provides functionality to call the ServiceObjects GeoPhone Plus 2 SOAP service's GetPhoneInfo endpoint,\n * retrieving reverse phone lookup information with fallback to a backup endpoint for reliability in live mode.\n * &lt;\/summary>\n *\/\nclass GetPhoneInfoSoap {\n    \/**\n     * &lt;summary>\n     * Initializes a new instance of the GetPhoneInfoSoap class with the provided input parameters,\n     * setting up primary and backup WSDL URLs based on the live\/trial mode.\n     * &lt;\/summary>\n     * @param {string} phoneNumber - The 10 digit phone number.\n     * @param {string} testType - The type of validation to perform ('FULL', 'BASIC', or 'NORMAL').\n     * @param {string} licenseKey - Your license key to use the service. \n     * @param {boolean} isLive - Value to determine whether to use the live or trial servers.\n     * @param {number} timeoutSeconds - Timeout, in seconds, for the call to the service.\n     * @throws {Error} Thrown if LicenseKey is empty or null.\n     *\/\n    constructor(PhoneNumber, TestType, LicenseKey, isLive = true, timeoutSeconds = 15) {\n\n        this.args = {\n            PhoneNumber,\n            TestType,\n            LicenseKey\n        };\n\n        this.isLive = isLive;\n        this.timeoutSeconds = timeoutSeconds;\n\n        this.liveBaseUrl = \"https:\/\/sws.serviceobjects.com\/GPPL2\/api.svc?singlewsdl\";\n        this.backupBaseUrl = \"https:\/\/swsbackup.serviceobjects.com\/GPPL2\/api.svc?singlewsdl\";\n        this.trialBaseUrl = \"https:\/\/trial.serviceobjects.com\/GPPL2\/api.svc?singlewsdl\";\n\n        this._primaryWsdl = this.isLive ? this.liveBaseUrl : this.trialBaseUrl;\n        this._backupWsdl = this.isLive ? this.backupBaseUrl : this.trialBaseUrl;\n    }\n\n    \/**\n     * &lt;summary>\n     * Asynchronously calls the GetPhoneInfo SOAP endpoint, attempting the primary endpoint\n     * first and falling back to the backup if the response is invalid (Error.TypeCode == '3') in live mode\n     * or if the primary call fails.\n     * &lt;\/summary>\n     * &lt;returns type=\"Promise&lt;GPPL2Response>\">A promise that resolves to a GPPL2Response object containing reverse phone lookup details or an error.&lt;\/returns>\n     * &lt;exception cref=\"Error\">Thrown if both primary and backup calls fail, with detailed error messages.&lt;\/exception>\n     *\/\n    async getPhoneInfo() {\n        try {\n            const primaryResult = await this._callSoap(this._primaryWsdl, this.args);\n\n            if (this.isLive &amp;&amp; !this._isValid(primaryResult)) {\n                console.warn(\"Primary returned Error.TypeCode == '3', falling back to backup...\");\n                const backupResult = await this._callSoap(this._backupWsdl, this.args);\n                return backupResult;\n            }\n\n            return primaryResult;\n        } catch (primaryErr) {\n            try {\n                const backupResult = await this._callSoap(this._backupWsdl, this.args);\n                return backupResult;\n            } catch (backupErr) {\n                throw new Error(`Both primary and backup calls failed:\\nPrimary: ${primaryErr.message}\\nBackup: ${backupErr.message}`);\n            }\n\n        }\n    }\n\n    \/**\n     * &lt;summary>\n     * Performs a SOAP service call to the specified WSDL URL with the given arguments,\n     * creating a client and processing the response into a GPPL2Response object.\n     * &lt;\/summary>\n     * &lt;param name=\"wsdlUrl\" type=\"string\">The WSDL URL of the SOAP service endpoint (primary or backup).&lt;\/param>\n     * &lt;param name=\"args\" type=\"Object\">The arguments to pass to the GetPhoneInfo method.&lt;\/param>\n     * &lt;returns type=\"Promise&lt;GPPL2Response>\">A promise that resolves to a GPPL2Response object containing the SOAP response data.&lt;\/returns>\n     * &lt;exception cref=\"Error\">Thrown if the SOAP client creation fails, the service call fails, or the response cannot be parsed.&lt;\/exception>\n     *\/\n    _callSoap(wsdlUrl, args) {\n        return new Promise((resolve, reject) => {\n            soap.createClient(wsdlUrl, { timeout: this.timeoutSeconds * 1000 }, (err, client) => {\n                if (err) return reject(err);\n\n                client.GetPhoneInfo(args, (err, result) => {\n                    const rawData = result?.GetPhoneInfoResult;\n                    try {\n                        if (!rawData) {\n                            return reject(new Error(\"SOAP response is empty or undefined.\"));\n                        }\n                        resolve(rawData);\n                    } catch (parseErr) {\n                        reject(new Error(`Failed to parse SOAP response: ${parseErr.message}`));\n                    }\n                });\n            });\n        });\n    }\n\n    \/**\n     * &lt;summary>\n     * Checks if a SOAP response is valid by verifying that it exists and either has no Error object\n     * or the Error.TypeCode is not equal to '1'.\n     * &lt;\/summary>\n     * &lt;param name=\"response\" type=\"GPPL2Response\">The GPPL2Response object to validate.&lt;\/param>\n     * &lt;returns type=\"boolean\">True if the response is valid, false otherwise.&lt;\/returns>\n     *\/\n    _isValid(response) {\n        return response &amp;&amp; (!response.Error || response.Error.TypeCode !== \"3\");\n    }\n}\n\nexport { GetPhoneInfoSoap };<\/pre>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":4116,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4216","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GPPL2 - SOAP<\/title>\n<meta name=\"description\" content=\"C#PythonNodeJS Phone Exchange C# Code Snippet \ufeffusing System; using System.Threading.Tasks; using GPPL2Service; namespace geophone_plus_2_dot_net.SOAP {\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GPPL2 - SOAP\" \/>\n<meta property=\"og:description\" content=\"C#PythonNodeJS Phone Exchange C# Code Snippet \ufeffusing System; using System.Threading.Tasks; using GPPL2Service; namespace geophone_plus_2_dot_net.SOAP {\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-27T07:28:34+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/\",\"name\":\"GPPL2 - SOAP\",\"isPartOf\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#website\"},\"datePublished\":\"2022-11-12T14:28:42+00:00\",\"dateModified\":\"2025-09-27T07:28:34+00:00\",\"description\":\"C#PythonNodeJS Phone Exchange C# Code Snippet \ufeffusing System; using System.Threading.Tasks; using GPPL2Service; namespace geophone_plus_2_dot_net.SOAP {\",\"breadcrumb\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DOTS GeoPhone Plus 2\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GPPL2 &#8211; Code Snippets and Sample Code\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"GPPL2 &#8211; SOAP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#website\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/\",\"name\":\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.serviceobjects.com\/docs\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#organization\",\"name\":\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png\",\"contentUrl\":\"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png\",\"width\":2560,\"height\":1440,\"caption\":\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\"},\"image\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GPPL2 - SOAP","description":"C#PythonNodeJS Phone Exchange C# Code Snippet \ufeffusing System; using System.Threading.Tasks; using GPPL2Service; namespace geophone_plus_2_dot_net.SOAP {","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/","og_locale":"en_US","og_type":"article","og_title":"GPPL2 - SOAP","og_description":"C#PythonNodeJS Phone Exchange C# Code Snippet \ufeffusing System; using System.Threading.Tasks; using GPPL2Service; namespace geophone_plus_2_dot_net.SOAP {","og_url":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/","og_site_name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","article_modified_time":"2025-09-27T07:28:34+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/","url":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/","name":"GPPL2 - SOAP","isPartOf":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#website"},"datePublished":"2022-11-12T14:28:42+00:00","dateModified":"2025-09-27T07:28:34+00:00","description":"C#PythonNodeJS Phone Exchange C# Code Snippet \ufeffusing System; using System.Threading.Tasks; using GPPL2Service; namespace geophone_plus_2_dot_net.SOAP {","breadcrumb":{"@id":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/gppl2-soap\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.serviceobjects.com\/docs\/"},{"@type":"ListItem","position":2,"name":"DOTS GeoPhone Plus 2","item":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/"},{"@type":"ListItem","position":3,"name":"GPPL2 &#8211; Code Snippets and Sample Code","item":"https:\/\/www.serviceobjects.com\/docs\/dots-geophone-plus-2\/gppl2-code-snippets-and-sample-code\/"},{"@type":"ListItem","position":4,"name":"GPPL2 &#8211; SOAP"}]},{"@type":"WebSite","@id":"https:\/\/www.serviceobjects.com\/docs\/#website","url":"https:\/\/www.serviceobjects.com\/docs\/","name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","description":"","publisher":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.serviceobjects.com\/docs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.serviceobjects.com\/docs\/#organization","name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","url":"https:\/\/www.serviceobjects.com\/docs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/","url":"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png","contentUrl":"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png","width":2560,"height":1440,"caption":"Service Objects | Contact, Phone, Email Verification | Data Quality Services"},"image":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/4216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/comments?post=4216"}],"version-history":[{"count":14,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/4216\/revisions"}],"predecessor-version":[{"id":12357,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/4216\/revisions\/12357"}],"up":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/4116"}],"wp:attachment":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/media?parent=4216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}