2010-03-02 17 views
7

Visual Studio geliştirme web sunucusuna (Cassini) sınırlamasının yalnızca localhost'taki sunucularında olduğu gibi, yalnızca localhost'ta ihtiyaç duyulan bir WCF Hizmeti uygulamasına sahibim.Yalnızca yerel dinleme için WCF'yi yapılandırma

Windows Güvenlik Duvarı'nın programın dışarıdan bakan NIC'de dinlenmesine izin vermesi istendiğinde, erişimi olan diğer makinelere de aldırış etmem. Bu yalnızca dahili olarak gerekli olduğundan, WCF Sunucu tarafı yapılandırmasını güvenlik duvarı algılayıcısını açmadığı şekilde kısıtlamayı tercih ederim.

binding.HostNameComparisonMode = HostNameComparisonMode.Exact doğru çözüm mü? Bunun nasıl olduğunu göremiyorum.

====

gibi Cassini, bu Servis uygulaması bir stand-ağ iletişimi gerektiren YAPAR başka bir şey içindir. İstemci, gerçek sunucuya veya localhost üzerinde çalışan sahte uygulamaya bağlanmak için yapılandırılabilir.

cevap

0

Nasıl barındırdığınıza bağlı olarak değişir. IIS7 veya WAS içinde iseniz, WCF, IIS'nin eşleşme modunu kullanır. Aksi takdirde, HostNameComparisonMode.Exact kullanırsanız, evet, ana bilgisayar adı her zaman eşleşen bir kritik faktör olacaktır. Ana makine adı eşleşmezse, gönderim genellikle başarısız olur.

Tam olarak% 100 tam olarak kesin olmadığına dikkat edilmelidir ... hala ana bilgisayar adında bazı değişikliklere izin verir. Bir NetBios ana bilgisayar adınız ve tam bir DNS adınız varsa, WCF bu ikisini bir ve aynı olarak ele aldığından, eşleştirme yine de gerçekleşir.

System.ServiceModel.BasicHttpBinding.HostNameComparisonmode

+0

Bağlamayı denedim.HostNameComparisonMode = HostNameComparisonMode.Exact tekrar ve çalışmıyor. İlgili Windows güvenlik duvarı kurallarını temizledikten sonra, güvenlik duvarı yeniden izin vermek için yeniden başlatır. –

+0

Ayrıca ServiceHost yapıcısı –

+0

için bir temel adres olarak yeni bir Uri ("net.tcp: // localhost") 'ekledim, öyle görünüyor ki, güvenlik duvarı bir geridöngü sunucusu olup olmadığına bakılmaksızın sizi uyarır. değil. Adlandırılmış Boruları kullanmaktan başka, bunun hakkında yapabileceğiniz bir şey olup olmadığından emin değilim. – jrista

6

Ben bunu yanlış şekilde yaklaştığını düşünüyorum. Kullandığınız ileti değişim modelini desteklemesi gereken adlandırılmış yöneltme bağlayıcısını kullanmalısınız (WS'nin desteklediği aynı eşzamanlılık ve oturum durumu modlarının yanı sıra istek yanıtını da destekler).

bir adlandırılmış kanal Windows işletim sistemi çekirdeği bir nesne, örneğin bir adlandırılmış yöneltme Ulaştırma

Kullanılır: MSDN bölümünden

"Choosing a Transport" (vurgu benim) başlıklı işlemlerinin iletişim için kullanabileceği paylaşılan bir bellek bölümü olarak. Adlandırılmış bir adında bir ad vardır ve tek bir makinedeki işlemler arasında tek yönlü veya çift yönlü iletişim için kullanılabilir.

iletişim farklı WCF uygulamalar arasında tek bir bilgisayarı gereklidir ve istediğiniz ardından adlandırılmış borularımla taşıma kullanmak, başka makineden herhangi iletişimi engeller. Ek kısıtlaması, Uzak Masaüstü'nü çalıştıran işlemlerin, oturumunda, ayrıcalıklarına sahip olmadıkça, aynı Windows Uzak Masaüstü oturumuna sınırlı olabilir.

Bu, tam gereksinimlerinizi karşılar ve bir yapılandırma değişikliğinden fazlası olmamalıdır.

+0

Anlaşmalı; "localhost only" gerçekten "interprocess communication" dir ve adlandırılmış borular bunun için en iyisidir. – Randolpho

+0

Üzgünüm - Açıklayacağım: Cassini gibi, bu Servis uygulaması ağ iletişimi gerektiren başka bir şey için bir stand-in. İstemci, gerçek sunucuya veya localhost üzerinde çalışan sahte uygulamaya bağlanmak için yapılandırılabilir. –

+0

@Jason: İstemci yapılandırılabilirse, neden bir Http uç noktası yerine bir Adlandırılmış Boru uç noktası kullanacak şekilde yapılandırılmamalıdır? WCF'nin her ikisi de yetenekli olduğu için ve http ile borudan bir hizmet çağırmak, WCF için de aynı ... neden başka bir şeyle uğraşmıyorsunuz? – jrista

İlgili konular