Esta página esta en desarrollo, Sean bienvenidos.

Calling Cross Domain Web Services in AJAX ASP.NET C#

Llamando json, mediante un servicio web entre dominios diferentes con asp.net c#.

Planteamiento:

Tengo un servicio web recibiendo peticiones mediante  “this.Context.Request.QueryString” enviadas por un portal web y la cadena de respuesta es

      [WebMethod(Description = “WebService-testDescription”)]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public object NombreWebMethodEntry()
        {
             var queryString = this.Context.Request.QueryString;
             return new JavaScriptSerializer().DeserializeObject(data);//tipo de dato de regreso
       }
Adicionalmente es capturado de la siguiente manera y posteriormente es mostrado en un datagrid o tabla.

 

var dataAdapter = new $.jqx.dataAdapter(
source, {
contentType: ‘application/json; charset=utf-8’,
dataType: “json”,
loadError: function (xhr, status, error) {
alert( error);
}
});

 

Entonces surgen los siguientes inconvenientes:

 

No regresa los datos.
Regresa los siguientes mensajes “a mi me los regreso aclaro”:

  • Error: Acceso denegado
  • Error interno del servidor
  • http/1.1 500 internal server error

La pregunta es: Por que si en mi equipo local, realiza las peticiones de manera correcta y al momento de publicar el proyecto ya no lo hace???

Sencillo:

El lugar donde se publico el proyecto pertenece a un dominio diferente.
Además que por seguridad asp. net no permite el regreso de esta información a menos claro que la dirección del servicio web sea agregado a su servidor proxi.

 

Ahora bien json se divide en 2 partes:

  • json
  • jsonp

la diferencia básicamente entre 1 y otro es:
Json regresa cadena de caracteres

[{“CompanyName”:”Alfreds Futterkiste”,
“Country”:”Austria”}]

Contrario a jsonp, regresa un archivo con los caracteres descritos anteriormente.

Revisando mas a detalle me encontré que el cliente envía application/json charset=utf-8

 

pantalla1

y le respuesta tendría que ser igual sin embargo no lo realiza text/plain charset=utf-8

pantalla2

 

Después verifique que:
Los parámetros  de entrada sean correctos.
La consulta a mi base de datos sea correcta.
No contenga caracteres especiales de json sea correcta.
Los parámetros de salida estén correctos.
Todo bien y la pregunta de los programadores por que no lo hace?

 

Mas a detalle
Encabezado
There was an error generating the XML document. —> The type System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] is not supported because it implements IDictionary.

 

Sin embargo yo no regreso ninguna estructura XML.
Después de 8 días de investigación encontré esto en un blog.

 

Básicamente agregue estas líneas a mi archivo de configuración y todo quedo solucionado.

<system.serviceModel>
    <behaviors>
       <endpointBehaviors>
           <behavior name=”CountryProvinceBehavior”>
              <webHttp/>       
            </behavior>
        </endpointBehaviors>
    </behaviors>
 
    <services>
         <service behaviorConfiguration=”CountryProvinceBehavior”
                  name=”CountryProvinceWCFService”>
                <endpoint address=”” binding=”webHttpBinding”
                   contract=”ICountryProvinceWCFService”
                   behaviorConfiguration=”CountryProvinceBehavior”/>    
         </service>
    </services>
</system.serviceModel>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name=”Access-Control-Allow-Origin” value=”*” />
<add name=”Access-Control-Allow-Headers” value=”Content-Type” />
</customHeaders>
</httpProtocol>

<handlers>
<add name=”ScriptHandlerFactory” verb=”*” path=”*.asmx” type=”System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ resourceType=”Unspecified” />
</handlers>

</system.webServer>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength=”5000000″/>
</webServices>
</scripting>
</system.web.extensions>

<system.web>
<webServices>
<protocols>
<add name=”HttpGet”/>
<add name=”HttpPost”/>
</protocols>
</webServices>
</system.web>

 

 

 

 

Url de referencia:
http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx
http://www.ibm.com/developerworks/library/wa-aj-jsonp1/
http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
https://community.dynamics.com/crm/b/mscrmshop/archive/2012/07/16/crm2011-and-cross-domain-calls-part-1.aspx
https://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/
http://devproconnections.com/aspnet/two-methods-handling-cross-domain-ajax-calls
http://man.ddvip.com/web/bsaspnetapp/LiB0087.html
http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/
http://stackoverflow.com/questions/4834942/jqueryajax-webservice-and-crossdomain-problem
http://weblogs.asp.net/scottgu/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks
http://www.sharepointjohn.com/aspnet-proxy-page-cross-domain-requests-from-ajax-and-javascript/
http://stackoverflow.com/questions/4834942/jqueryajax-webservice-and-crossdomain-problem
http://www.wenda.io/questions/316977/asp-net-webservice-is-wrapping-my-json-response-with-xml-tags.html
http://man.ddvip.com/web/bsaspnetapp/LiB0087.HTML

 

 

 

saludos …
http://www.itixmih.wordpress.com
jemp_intrepido
jempdulintre
jemp_dulce

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Nube de etiquetas

A %d blogueros les gusta esto: