7

(Sorunumla ilgili birkaç soru görüyorum ama çözümlerin hiçbiri benim için çalışmıyor, çünkü yerel üretim sırasında değil, üretimde bu sorunla karşılaşıyorum ve zaten önerilen tüm düzeltmeleri denediniz.)Silverlight WCF + SSL güvenlik hatası - crossdomain.xml hiç bir zaman talep edilmiyor

IIS tarafından barındırılan WCF hizmetlerini kullanan bir Silverlight 4 uygulamasına sahibim. Üretimde bu hizmetlere HTTPS üzerinden erişilir. Hiçbir istek crossdomain.xml veya clientaccesspolicy.xml yapılır görebilirsiniz Fiddler kullanarak

An error occurred while trying to make a request to URI 'https://MYDOMAIN/MYSERVICE.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error...

: a valid crossdomain.xml dosyayı hizmetini erişirken hala ünlü "Güvenlik hatası" olsun olmasına rağmen. Sunucuya bir CONNECT isteği var ama hepsi bu.

Sunucuda geçersiz bir sertifika verildiğinde, crossdomain.xml/clientaccesspolicy.xml ile ilgili bir sorun olduğunu göstermesine rağmen bu hatayı okuduğunu da okudum. Bu benim senaryoda böyle görünmüyor.

Ben doğru bir şekilde kurulmuş aşağıdaki eminim:
1. Crossdomain.xml geçerlidir ve
2. hizmetleri çalışır sitenin kök barındırılan (Biz bunları kullanmak çeşitli teknolojilere diğer müşterimiz var (crossdomain.xml'ye dayanan Adobe Flex dahil.)
3. Silverlight uygulaması işe yaramaz (Yerel bir hizmet ve hizmetler ile paylaşılan bir geliştirme sunucusunda çok iyi çalışır ***)
4. Silverlight uygulaması bile crossdomain.xml veya clientaccesspolicy.xml (Fiddler tarafından onaylandığı gibi) isteğinde bulunmayı deneyin.
5. Silverlight uygulaması, https üzerinden WCF'ye erişmek için uygun yapılandırmayı kullanır.

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IMyServices" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
        <security mode="Transport" /> 
       </binding> 
       </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://MYDOMAIN/MYSERVICE.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyServices" contract="Services.IMyServices" name="BasicHttpBinding_IMyServices" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

başka neler Bu tür sorunları neden olabilir: Aşağıda yapılandırma nedir? Web sunucuları yük dengeli olduğundan dolayı olabilir mi? Yoksa fark etmediğim sertifikayla ilgili bir sorun mu var? En azından beni doğru yönde yönlendirebilirseniz, bu çok takdir edilecektir.

(*** İşaret etmeye değer bir şey: Geliştirme ortamımızda da benzer bir sorunla karşılaştım. Silverlight uygulaması, uygun bir crossdomain.xml dosyasına sahip olmasına ve HTTPS kullanmamasına rağmen paylaşılan bir geliştirme sunucusundaki WCF hizmetlerine erişemedi IE'de geliştirme sunucusunu güvenilen bir site olarak ekleyerek çalıştım.Ama yine de bu geçici çözüm üretim için işe yaramıyor ve hatta o zaman bu kabul edilebilir bir çözüm olmazdı. geliştirme ortamı, yol boyunca bir şeyleri özlediğim için beni endişelendiriyor ...)

+0

Sunucuya bağlantı isteği için yanıt kodu nedir? Tarayıcımda sağladığınız bağlantıya eriştiğimde, bir "403 - Yasak: Erişim engellendi" cevabı aldım – wickedtreemonkey

+0

200 bir yanıt kodu alıyorum. Bu bağlantı bir 403 döndürüyor çünkü etki alanının köküne bağlanıyorum. sınırlıdır. Bağlanmak istemediğim servis uç noktaları herkese açıktır ve bu nedenle 200. – Keith

+0

web sitesi http://stackoverflow.com/questions/7847220/clientaccesspolicy-xml-not-requested-the-first -zaman-in-bazı-tarayıcılarda. bu belki yardımcı olabilir. –

cevap

10

Sorun şu ki ben clientaccesspolicy.xml eksikti. Bu durumda crossdomain.xml yeterli değildi. Ben düşünün WCF çağırma sadece çapraz tarayıcı değil, aynı zamanda çapraz protokol (çünkü Silverlight uygulaması http üzerinden sunuldu, ancak hizmetler https üzerinden sunuldu). Şimdi bir cazibe gibi çalışır

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
     <policy> 
      <allow-from http-request-headers="SOAPAction"> 
       <!-- IMPORTANT! Include these lines --> 
       <domain uri="http://*"/> 
       <domain uri="https://*"/> 
      </allow-from> 
      <grant-to> 
       <resource path="/" include-subpaths="true"/> 
      </grant-to> 
     </policy> 
    </cross-domain-access> 
</access-policy> 

:

Ayrıca, benim clientaccesspolicy.xml aşağıdaki gibi açıkça http erişime izin gerekiyordu.

Yol boyunca beni tetikleyen birkaç şey:
* Tarayıcım clientaccesspolicy.xml ve crossdomain.xml dosyasını önbelleğe alıyordu.Bu dosyaların birini her değiştirdiğimde önbelleğimi temizlemeliyim veya IIS'nin bu dosyanın istemci tarafından önbelleğe alınmasını engellemek üzere yapılandırılmış olmasına rağmen, daha yeni sürümü tanıyamazdım.
* clientaccesspolicy.xml ve crossdomain.xml istekleri her zaman Fiddler'da gösterilmiyordu. Bunun yerine sık sık CONNECT isteklerini görürüm. Bunun nedenini anlamıyorum ama bu taleplerin yapıldığını doğrulamak için Fiddler'a güvenmemeyi öğrendim. Belki de bir yerlerde sahtekarlık ayarlamam var (ve hayır zaten devre dışı bırakılmış olan "HTTPS trafiğini çöz" ayarı değil).

3

Sitemde http üzerinden arama yapmaya çalıştığımda ve hatayı https bittiğinde aynı hatayla karşılaştım, başarısız oldu. Bu hata, ISS'mn hiçbir sertifikasının olmaması nedeniyle ortaya çıktı; bu nedenle, uygulama clientaccesspolicy sürümünü indirmeye çalıştığında başarısız oldu.

Tarayıcınızdaki herhangi bir hata ayıklama aracına bir göz atın ve clientacccesspolicy dosyasını arayın, ardından karşıdan yüklendiğini kontrol edin.