def call(operation, message, &block)
			raise "You must provide an operation" if operation.nil?
			begin
				LOGGER.debug "BingAdsApi Service"
				LOGGER.debug "   Calling #{operation.to_s}"
				LOGGER.debug "   Message: #{message}"
				response = self.client_proxy.call(operation.to_sym, 
					message: message)
			
				LOGGER.debug "response header:"
				LOGGER.debug "\t#{response.header}"

				LOGGER.info "Operation #{operation.to_s} call success"
				return response.hash
			rescue Savon::SOAPFault => error
				LOGGER.error "SOAP Error calling #{operation.to_s}: #{error.http.code}"
				fault_detail = error.to_hash[:fault][:detail]
				if fault_detail.key?(:api_fault_detail)
					api_fault_detail = BingAdsApi::ApiFaultDetail.new(fault_detail[:api_fault_detail])
					raise BingAdsApi::ApiException.new(
						api_fault_detail, "SOAP Error calling #{operation.to_s}")
				elsif fault_detail.key?(:ad_api_fault_detail) 
					ad_api_fault_detail = BingAdsApi::AdApiFaultDetail.new(fault_detail[:ad_api_fault_detail])
					raise BingAdsApi::ApiException.new(
						ad_api_fault_detail, "SOAP Error calling #{operation.to_s}")
				else
					raise
				end
			rescue Savon::HTTPError => error
				LOGGER.error "Http Error calling #{operation.to_s}: #{error.http.code}"
				raise
			rescue Savon::InvalidResponseError => error
				LOGGER.error "Invalid server reponse calling #{operation.to_s}"
				raise
			end
		end
def call(operation, message, &block)
			raise "You must provide an operation" if operation.nil?
			begin
				LOGGER.debug "BingAdsApi Service"
				LOGGER.debug "   Calling #{operation.to_s}"
				LOGGER.debug "   Message: #{message}"
				response = self.client_proxy.call(operation.to_sym, 
					message: message)
			
				LOGGER.debug "response header:"
				LOGGER.debug "\t#{response.header}"

				LOGGER.info "Operation #{operation.to_s} call success"
				return response.hash
			rescue Savon::SOAPFault => error
				LOGGER.error "SOAP Error calling #{operation.to_s}: #{error.http.code}"
				fault_detail = error.to_hash[:fault][:detail]
				if fault_detail.key?(:api_fault_detail)
					api_fault_detail = BingAdsApi::ApiFaultDetail.new(fault_detail[:api_fault_detail])
					raise BingAdsApi::ApiException.new(
						api_fault_detail, "SOAP Error calling #{operation.to_s}")
				elsif fault_detail.key?(:ad_api_fault_detail) 
					ad_api_fault_detail = BingAdsApi::AdApiFaultDetail.new(fault_detail[:ad_api_fault_detail])
					raise BingAdsApi::ApiException.new(
						ad_api_fault_detail, "SOAP Error calling #{operation.to_s}")
				else
					raise
				end
			rescue Savon::HTTPError => error
				LOGGER.error "Http Error calling #{operation.to_s}: #{error.http.code}"
				raise
			rescue Savon::InvalidResponseError => error
				LOGGER.error "Invalid server reponse calling #{operation.to_s}"
				raise
			end
		end
Public : Constructor

 Author:: jlopezn@neonline.cl

 === Parameters
 * +options+ - Hash with autentication and environment settings

 === Options
 * environment - +:production+ or +:sandbox+
 * username - Bing Ads username
 * passwrod - Bing Ads user's sign-in password
 * developer_token - client application's developer access token
 * customer_id - identifier for the customer that owns the account
 * account_id - identifier of the account that own the entities in the request
 * proxy - Hash with any Client Proxy additional options (such as header, logger or enconding)

 === Examples
   service = BingAdsApi::Service.new(
     :environment => :sandbox,
     :username    => 'username',
     :password    => 'pass',
     :developer_token => 'SOME_TOKEN',
     :account_id  => 123456,
     :customer_id => 654321,
     :proxy => {:logger => Rails.logger}
   )
   # => <Service>
 Public : This is a utility wrapper for calling services into the
 +ClientProxy+. This methods handle all the +Savon::Client+ Exceptions
 and returns a Hash with the call response

 Author:: jlopezn@neonline.cl

 === Parameters
 +operation+ - name of the operation to be called
 +message+ - hash with the parameters to the operation

 === Examples
   service.call(:some_operation, {key: value})
   # => <Hash>

 Returns:: Hash with the result of the service call
 Raises:: ServiceError if the SOAP call, the ClientProxy fails or the response is invalid