2011-04-16 12 views

Odpowiedz

5

Jeśli chcesz wywołania między domenami z javascript do WCF, musisz użyć JSONP. Aby dodać obsługę JSONP do WCF, musisz zdefiniować ją w WebHttpBinding. Konfiguracja powinna wyglądać następująco:

<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> 

dla jQuery części czeku na przykład this article.

+0

Witam, stworzyliśmy usługę typu post.When przesyłam dane z jquery ajax to nie działa. Metoda typu GET działa dobrze. – user601367

+1

Połączenia JSONP/Cross Domain działają tylko z HTTP GET. Więcej informacji tutaj: http://stackoverflow.com/questions/2699277/post-data-to-jsonp –

+2

jak utworzyć żądanie 'POST' w domenie' cross domain' przez ajax? –

2

Dostałem go do pracy przy użyciu zestawu ustawień JQuery (1.5.1) $ .ajax CrossDomain na wartość true.

Czego jeszcze nie rozumiem, to dlatego, że przy korzystaniu z atrybutu [ScriptMethod (ResponseFormat = ResponseFormat.Json)] w usłudze WCF (.NET4), wywołanie powiedzie się bez ustawienia crossdomain (do sieci. config i $ .ajax) i przy użyciu atrybutu [WebGet (ResponseFormat = WebMessageFormat.Json)] wymaga ustawień crossdomain w wywołaniach webconfig i $ .ajax. Jeśli użyję atrybutu WebGet bez ustawień crossdomain, otrzymam błąd "Method Not Allowed".

kod WCF jest stosowany:

[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; 
} 

jakieś pomysły?

2

chrom/Firefox nie pozwolił mi tego zrobić, dopóki nie jawnie ustawić

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

w moich rozmów