2008-12-16 24 views
10

Silverlight özellikli bir wcf hizmetine başvuruda bulunan bir Silverlight denetimine sahibim.wcf hizmet bağlayıcıda göreli url

benim Silverlight kontrolünde hizmetine bir referans eklemek, benim clientconfig dosyasına aşağıdaki ekler:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_DataAccess" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647"> 
        <security mode="None" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:3097/MyApp/DataAccess.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DataAccess" 
       contract="svcMyService.DataAccess" name="BasicHttpBinding_DataAccess" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

nasıl bitiş noktası adresi yerine mutlak url göreli url belirtebilirim? Silverlight bileşeni ve web uygulaması her zaman birlikte dağıtılacağından, clientconfig dosyasını düzenlemeye gerek kalmadan web uygulamasını nerede dağıttığım olursa olsun çalışmasını istiyorum. Ben sadece "DataAccess.svc" belirtebileceğini düşündüm ama bu gibi görünmüyor.

cevap

4

İstemci son nokta yapılandırmasında göreli URI'leri kullanamazsınız. Yapabilecekleriniz, proxy sınıfınıza başka bir yapılandırma değeri ekleyebileceğiniz veya başka bir yapılandırma değerinden alabileceğiniz veya Dns sınıfı yöntemlerinden birini kullanabileceğiniz bir URL parametresi alacağınız bir başka kurucu eklemektir.

+0

Bu yaklaşımı ele alırsam, göreli URL parametresini nereye yerleştirebilirim? ServiceReferences.ClientConfig bakıyorum ve bunu koymak için bir yer görmüyorum - bir web.config dosyası ans aynı öğeleri var gibi görünmüyor. – Jeremy

14

Çözümümün: ben göreli URI kullandık

svcMyService.DataAccessClient svcProxy_m; 

System.ServiceModel.BasicHttpBinding binding = new System.ServiceModel.BasicHttpBinding(); 

/* 
Create an end point, build a an absolute uri reference by specifing the host address and a relative referece to the service page. 
Application.Current.Host.Source will be something like Http://server/app/ClientBin/SilverlightApp.xap"<br/><br/> 
Specifying Uri(Application.Current.Host.Source, "../DataAccess.svc")); will return "Http://server/app/DataAccess.svc" 
*/ 

System.ServiceModel.EndpointAddress address = new System.ServiceModel.EndpointAddress(new Uri(Application.Current.Host.Source, "../DataAccess.svc")); 

svcProxy_m = new svcMyService.DataAccessClient(binding, address); 
+0

+1, Silverlight dağıtım sorunumu çözdü. – geofftnz

+0

Burada açıklanan davranışın varsayılan gümüş ışığı davranışı olacağını düşünürdüm. Her proje için bunu yapmamız gerektiğine şaşkınım. :( – Jeremy

1

:

yerine proxy sınıfını örneğini (ServiceReferences.ClientConfig dosyası kullanır) Devault kurucuyu kullanarak, aşağıdaki kullanmak yapılandırma ve SL4 uygulamam çalışır.

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_ICorrectionService" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Buffered"> 
        <security mode="None" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings>   
     <client> 
      <endpoint address="/CorrectionService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICorrectionService" 
      contract="CorrectionService.ICorrectionService" name="BasicHttpBinding_ICorrectionService" /> 
     </client>   
    </system.serviceModel> 
</configuration> 
İlgili konular