mevcutsa Projemin düzgün bir şekilde çalışmasını sağlayamıyorum. Benim senaretimiz diğer sorulardan biraz farklı olsa da, bunun bir fark yaratıp yaratmadığından emin değiliz ama işte gidiyoruz.
Web servislerinden oluşan bir projem var. Yalnız hizmetler iyi çalışıyor, bununla ilgili bir sorun yok. Ve bir şeylerin UI parçası işleyen ve bu hizmetleri jquery ajax yoluyla çağıran başka bir proje var. İyi çalışıyor çünkü bu vakayı daha önce Google Chrome'da test etmedim. Her şey Internet Explorer'da mükemmel çalışır.
Şimdi; web servis uygulamam 40000 bağlantı noktasında (localhost: 40000) çalışır ve UI projesi başka bir rasgele bağlantı noktasında çalışır ancak yine de localhost içinde çalışır. Dediğim gibi ajax çağrılarım internet explorer'da mükemmel çalışır, ancak Google Chrome söz konusu olduğunda başarısız olur. böylece internette bazı sonrası ben localhost yerine IP adresine değiştirebilirsiniz önerdi önce konsol aşağıdaki hata gösterir:
XMLHttpRequest cannot load http://127.0.0.1:40000/abc.asmx/TheMethodName. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:17256' is therefore not allowed access. The response had HTTP status code 400.
arada, "40000 localhost" gibiydi.
Neyse, ben de benim web hizmeti proje üzerinde benim web.config dosyasını düzenlenebilir ve eklemiş, ilk satırı kullanırsanız,
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="crossDomain" crossDomainScriptAccessEnabled="true">
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:17256" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Max-Age" value="1728000" />
</customHeaders>
</httpProtocol>
</system.webServer>
BTW (herhangi bir anlam ifade etmeyen) Aşağıdaki: it Tamamen başarısız olur ve yanıt üstbilgisi iletilerinin eşleşmediğini ve hizmetin başlatılmasına bile başlayamayacağımı söyler.
ŞimdicrossDomain: true,
, burada ne eksik:
Ve evet, ben de benim ajax arama düzenledikten aşağıdaki parametreyi eklendi? Günler boyunca bu konudaydım ve aklımı kaybetmek üzereyim :) Projenin bütün yapısını değiştirmek için çok geç (hizmet - UI stili demek istiyorum) UI projeleri. Lütfen yardım edin çaresizim! :)
Alkış
Düzenleme:
Demek ki ben JSONP değil JSON kullanmaya gerek çıkıyor - bu gayet Erişim Denetimi şey ile sıkışmış almaz beri . Ajax çağrılarımı JSONP olanlara dönüştürebilirim. Ama başka bir yardıma ihtiyacım var :)
Ayrı sayfalardaki her işlemden çağrılan global bir ajax yöntemi yazdım ve çekicilik gibi çalışıyor (tabii ki Internet Explorer'da). Şimdi bu sarmalayıcı işlevini bir jsonp şeyine dönüştürmek için ne yapmalıyım? (Kafam karışık budur) geri çağırma yöntemiyle 'jsonp_callback':
function RemoteCall(WebService, RemoteMethod, RemoteParameters, callbackResult) {
if (RemoteParameters == null || RemoteParameters == "") {
RemoteParameters = "{ }";
}
var remoteCall = $.ajax({
type: "POST",
url: ProvideService(WebService, RemoteMethod),
data: RemoteParameters,
contentType: ajaxContentType,
dataType: ajaxDataType,
async: true,
crossDomain: true,
success: function (msg) {
msg.header("Access-Control-Allow-Origin", "*");
callbackResult(msg.d);
},
error: function (xhr, ajaxOptions, thrownError) {
callbackResult(xhr.status + '\r\n' + thrownError + '\r\n' + xhr.responseText);
}
});
}
ben JSONP gibi bir özellik eklemek gereken bazı mesajları gördü. Peki buna ne dersin?Başka bir şey; Ben
var jSONParams = '{ UserID: "1", EmailAddress: "[email protected]" }';
Aynı biçimi olarak bu göndermeye devam mı yoksa JSON nesnesi ya da bir şey bir tür dönüştürülmesi gerekir gibi bir değişkene bir metin olarak benim json parametreleri göndererek edilmiştir?
BTW: benim küresel ajax fonksiyonu tamamen ayrı JS dosyasına olduğunu - emin olsa Bir değişiklik olup olmadığını ...
Şerefe CORS konunun hiç hoş değil karaya
ciddiye kimse? –
Son nokta herhangi bir kimlik doğrulama türünü kullanıyor mu? Windows auth, vb? –