2012-11-22 20 views
5

WCF DataServices tarafından uygulanan bir OData bitiş noktasında varlıkları okumak/değiştirmek için ajax tabanlı bir bileşen (KendoUI) kullanmak istiyorum. WCF DataService, ön kontrol opsiyonlarını desteklemiyor mu?

hizmet uygulaması

ilk etapta oldukça kolaydı:
public class MyFooService : DataService<FooContext> 
{ 
    public static void SetEntitySetAccessRules(IDataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite); 
    } 
} 

Şimdi PUT kullanarak varlıkları değiştirme muktedir bekliyordum. KendoUI, güzel ve kolay bir yapılandırma arayüzü sağlar ve PUT isteğini oluştururken iyi bir iş çıkarır.

Web alanları arası bir istekte bulunuyor ve CORS kullanıyoruz. Yani, Firefox, örneğin, PUT göndermeden önce OData servisine bir ön kontrol OPTIONS isteği gönderir.

Ne yazık ki hizmet bitiş noktası, OPTIONS'ı kutudan desteklemiyor gibi görünüyor: OPTIONS isteğine yanıt, boş bir içeriğe sahip "501 Uygulanmadı". En azından şöyle yanıt CORS başlıklarını sahip olduğunu başardı: ... Bu Googling

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

çok popüler bir terim olduğu için "seçenekler" zorlu biraz dönüştü

Ben this article buldum ama Bu çok, çok karmaşık görünüyor. Demek istediğim, OData'nın tümü REST'le ilgili, WCF Veri Hizmetlerinin önkontrol isteklerine izin vermenin basit bir yolunu sağladığını düşünemiyorum, ya da?

+1

WCF OData Servis WCF üzerinde çalışır ve aynı WCF boru hattından geçer. Eğer öyleyse bu bağlantıyı kontrol edin [cevap] (http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-allowed-by-access-control-allow-origin/11606701#11606701). IMHO, CORS'i WCF'ye yerleştirmenin en kolay yoludur. – Obaid

+0

Bunun tam olarak ne istediğinizi bilmediğini biliyorum ancak çapraz etki alanı istekleriyle çalışmanın en kolay yolu yalnızca IIS'nin ters proxy'sini kullanmaktır. Bu şekilde yalnızca kendi etki alanınıza karşı gelirsiniz ve IIS, isteğinizi diğer etki alanına gönderen kişidir. Ardından, kodunuzun diğer alanlarla ilgili bir şey bilmesi gerekmez. – lontivero

+0

Rastgele bu konuda tökezledi; sadece bu [https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors] ve [bu] ile bağlantı kuracağımı düşündüm (https://data.uservoice.com/forums/ Ek tartışma için 72027-wcf-data-services-feature-suggestions/suggestions/4450449-cors-support). – tne

cevap

1

Şu anda WCF DataServices CORS'i desteklemiyor ve gördüğüm her çözüm bir kesmek ve en iyi şekilde pul pul çalışıyor.

Aynı sorun vardı ve kodumu WCF'den bir Web API 2 OData çözümüne taşıdım. Web API 2 CORS desteğine sahiptir ve kurulumu gerçekten kolaydır.

Web API aşina değilseniz, bu bağlantıya göz atın: Burada http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

Ve Web API ile bir OData bitiş noktası oluşturmak için nasıl bir öğretici olduğunu: Bunu götürün http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/creating-an-odata-endpoint

+0

Teşekkürler. Cevap geç kalsa da (ben de sorunu çözdüm de WebAPI'ye geçiyorum :-)) - bu, gelecekteki okuyucular için söyleyebileceğim kadar yararlı bir cevap olacaktır. – chiccodoro

İlgili konular