2010-11-19 22 views
2

Üçüncü taraf bir WCF hizmetini çağırmaktan sorumlu bir sınıf yazdım ve gayet iyi çalışıyor. Bizim uygulama yerel ağın proxy ayarları ile yapılandırılabilir, böylece geriye kalan tüm bu arama yaparken (bu ayarlanmışsa) bu ayarları kullanmaktır.WCF servis çağrımı yapılandırılmış yerel proxy sunucudan nasıl yaparım?

Etrafa bir baktım ve bunun nasıl yapılacağını açıkça belirten bir şey göremiyorum. Kullanmakta olduğum BasicHttpBinding nesnesinin bir ProxyAddress özelliği olduğunu buldum, ancak orada ağ kimlik bilgilerini veya kullanıcı adı ve parola tanımlamamı sağlayan hiçbir şey yok.

Muhtemelen burada önümde doğru, bu yüzden sadece doğru yönde işaret etmem gerektiğini düşünüyorum. En azından bu kadar basit olmasını umuyorum! Tek yapmam gereken, servis çağrımıma yerel proxy sunucusunun ne olduğunu ve hangi kimlik bilgilerinin kullanılacağını söylemektir.

Hizmet sınıfını başlatan kod budur. İstek sınıfını oluşturan, hizmet yöntemini çağıran ve sonucu işleyen bir sonraki bölümü ihmal ettim.

// Create the service instance. 
var binding = new BasicHttpBinding(); 
var endPoint = new EndpointAddress(new Uri(_servicesBaseUri + "MyServiceName")); 
var service = new WSHsgCreateSchemeRepairClient(binding, endPoint); 

// Add the MessageInspector to the contract behaviours list. This will inject the SecurityHeader XML and the SOAP action. 
var soapAction = _servicesBaseUri + "MyServiceName/MyServiceMethod"; 
service.Endpoint.Contract.Behaviors.Add(new MessageInspector(_securityHeaderUsername, _securityHeaderPassword, soapAction)); 

Biz diğer bazı web hizmeti çağrıları var (eski web hizmeti yaklaşımını kullanan) ve System.Net.WebProxy yeni bir örneğini oluşturur ve hizmet sınıfı Vekil mala karşı ayarlayın, ancak belli ki içinde farklı WCF.

Teşekkürler.

cevap

2

Sanırım çalıştım. Varsayılan sistem proxy'si ayarlanabilir ve kullanılabilir. Aynı gereksinime karşı başka biri varsa This is a very useful article.

fikri

öncelikle (tahminen System.Net.CredentialCache.DefaultCredentials) System.Net.HttpWebRequest.DefaultWebProxy.Credentials ayarlamak zorunda olduğunu - yani burada "varsayılan vekil" parametreleri true bağlanma UseDefaultWebProxy ayarladığınızda alınır bulunuyor.

0

Bunu, hizmetinize özel web.config ayarları aracılığıyla yapabilirsiniz. bağlayıcı konfigürasyonunda , set proxyAddress = "http: // myproxy: 8080" ve set useDefaultWebProxy =

<bindings> 
    <basicHttpBinding> 
    <binding name="SubscriberFulfilmentServiceSOAP12Binding" closeTimeout="00:01:00" 
    openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" 
    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
    maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
    textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="false" 
    proxyAddress="http://myproxy:8080" 
    messageEncoding="Text"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
     maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

tüm hizmetler için proxy ayarlamak için "yanlış":

<system.net> 
    <defaultProxy> 
    <proxy usesystemdefault="True" proxyaddress="http://myproxy:8080" bypassonlocal="True" /> 
    </defaultProxy> 
</system.net> 
İlgili konular