2011-04-16 11 views

Respuesta

5

Si desea realizar llamadas de dominio cruzadas de javascript a WCF, debe utilizar JSONP. Para agregar soporte JSONP a WCF, debe definirlo en WebHttpBinding. La configuración debe ser similar:

<bindings> 
    <webHttpBinding> 
    <binding name="crossDomain" crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
</binding> 
<behaviors> 
    <endpointBehavior> 
    <behavior name="restBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehavior> 
</behaviors> 
<services> 
    <service name="..."> 
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="crossDomain" 
       contract="..." behaviorConfigurations="restBehavior" /> 
    </service> 
</services> 

Para la comprobación parte jQuery por ejemplo this article.

+0

Hola, he creado un servicio de tipo post.When Estoy enviando datos de jquery ajax no funciona. El método de tipo GET funciona bien. – user601367

+1

Las llamadas JSONP/de dominio cruzado solo funcionan con HTTP GET. Más información aquí: http://stackoverflow.com/questions/2699277/post-data-to-jsonp –

+2

cómo hacer una solicitud 'POST' del dominio cruzado' a través de ajax? –

2

Lo tengo que trabajar usando la configuración JQuery (1.5.1) $ .ajax CrossDomain establecida en verdadero.

Lo que aún no entiendo es por qué cuando se usa el atributo [ScriptMethod (ResponseFormat = ResponseFormat.Json)] en el servicio WCF (.NET4), la llamada se realiza sin la configuración de dominio cruzado (a web. config y $ .ajax) y al usar el atributo [WebGet (ResponseFormat = WebMessageFormat.Json)] requiere la configuración de dominios cruzados en webconfig y $ .ajax call. Si utilizo el atributo WebGet sin la configuración de dominios cruzados obtendré un error de "Método no permitido".

código de WCF se utiliza:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json)] // requires crossdomain settings 
//[ScriptMethod(ResponseFormat = ResponseFormat.Json)] // no crossdomain settings required 
public string GetNumber(string id) 
{ 
    return "query response on id: " + id; 
} 

alguna idea?

2

Chrome/Firefox no me dejaría hacer esto hasta que establecer explícitamente

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 

en mis llamadas

Cuestiones relacionadas