Chcę użyć składnika opartego na ajax (KendoUI) do odczytu/modyfikacji elementów na punkcie końcowym OData zaimplementowanym przez WCF DataServices.WCF DataService nie obsługuje potwierdzenia wstępnego Żądania OPTIONS?
Realizacja obsługa była dość łatwa w pierwszej kolejności:
public class MyFooService : DataService<FooContext>
{
public static void SetEntitySetAccessRules(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite);
}
}
Teraz Spodziewałem się, aby móc modyfikować jednostki używając PUT. KendoUI zapewnia ładny i łatwy interfejs konfiguracyjny i wykonuje dobrą robotę w generowaniu żądania PUT.
Wysyłamy żądanie między domenami i używamy CORS. Na przykład Firefox wysyła preflightowe żądanie OPTIONS do usługi OData przed wysłaniem PUT.
Niestety, punkt końcowy usługi wydaje się nie obsługiwać OPCJONALNYCH po uruchomieniu: Odpowiedź na żądanie OPTIONS to "501 Not Implemented" z pustą treścią. Przynajmniej udało się nam, że odpowiedź ma nagłówki Cors następująco:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<!-- Enable cross-origin resource sharing -->
<!-- http://enable-cors.org/#how-asp.net -->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
Googling za to okazała się nieco trudna, ponieważ „Opcje” jest bardzo popularny termin ...
ale znalazłem this article wydaje się bardzo, bardzo skomplikowany. Chodzi mi o to, że OData dotyczy wyłącznie usługi REST, nie mogę sobie wyobrazić, że usługi danych WCF nie zapewniają prostego sposobu zezwalania na żądania wstępne, lub?
Rozumiem, że WCF OData Usługa działa na WCF i przechodzi przez ten sam potok WCF. Jeśli tak, sprawdź link w tej [odpowiedzi.] (Http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-ileded-by-access-control-allow-origin/11606701#11606701). IMHO jest najprostszym sposobem na wdrożenie CORS w WCF. – Obaid
Wiem, że nie jest to dokładnie to, co chcesz, ale myślę, że najprostszym sposobem na pracę z żądaniami między domenami jest użycie odwrotnego proxy IIS. W ten sposób idziesz tylko przeciwko własnej domenie, a IIS jest tym, kto wysyła Twoją prośbę do drugiej domeny. Wtedy Twój kod nie musi nic wiedzieć o innych domenach. – lontivero
Losowo potknął się o tym; tylko pomyślałem, że będę link do tego (https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors) i [that] (https://data.uservoice.com/forums/ 72027-wcf-data-services-feature-sugestie/sugestie/4450449-cors-support) dla dodatkowej dyskusji. – tne