2011-02-23 5 views
14

Bir .NET istemci uygulamasından bir WCF web hizmeti tüketmeye çalışıyorum ve programatik olarak uç noktaları oluşturabileceğimi düşünüyorum, fakat nasıl olduğunu bilmiyorum. Bu hatayı gidermek, ben tüketmeye çalıştıkları uygulamayı oluşturan basit pencereler, oluşturulan ikenİstemci uygulamasında WCF uç nokta yapılandırmaları oluşturun, kodda?

Could not find default endpoint element that references contract 'IEmailService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

: Ben uygulamayı çalıştırmayı denediğinizde, aşağıdaki hatayı alıyorum, çünkü bunu yapmak gerek aynı web servisi. Bu test uygulaması ile web servisine başarılı bir şekilde bağlanabilirim ve geçerli bir yanıt alıyorum. Ancak, test uygulamasında yukarıda belirtilen hatayı sistem.serviceModel düğümünü ve tüm çocuk düğümlerini uygulamanın app.config dosyasından kaldırarak yeniden oluşturabilirim (bu bölümün TÜMÜ'nü kaldırmak zorunda olmayabilirim, ben emin değil). Bu yüzden, ilk düşüncem, bu uygulamayı gerçek uygulama için app.config dosyasına eklemem gerektiğiydi ve her şey iyi olmalıydı. Ne yazık ki, buraya girmeyeceğim saçma sebeplerden dolayı, bu bir seçenek değil. Yani, bu bilgiyi kod içinde, istemci uygulamasının içinde oluşturmak zorunda kaldım.

Burada birisinin bana bu konuda çalışmamda yardımcı olabileceğini veya beni bu tür bir sorun için iyi bir kaynağa yönlendirebileceğini umuyorum.

İstemci uygulamasında kod içinde uç nokta yapılandırmaları oluşturmak mümkün mü?

cevap

37

Varsayılan olarak, bir Add Service Reference işlemi gerçekleştirdiğinizde, WCF çalışma zamanı sizin için istemci tarafı proxy'sini oluşturur.

en basit yolu herhangi bir parametre alan bir kurucu ile istemci vekil örneğini etmektir kullanın ve sadece app.config gelen bilgi kapmak için:

YourServiceClient proxy = new YourServiceClient(); 

Bu <client> giriş yapma yapılandırma dosyası gerektirir Servis sözleşmenizle - eğer değilse, sahip olduğunuz hatayı alacaksınız. -

Ama WCF çalışma zamanı tarafından oluşturulan istemci tarafı proxy sınıfı da ek bir oluşturucusu yok bir örneğin bir uç nokta adresi ve bir bağlama alır: Bu ayar ile

BasicHttpBinding binding = new BasicHttpBinding(SecurityMode.None); 
EndpointAddress epa = new EndpointAddress("http://localhost:8282/basic"); 

YourServiceClient proxy = new YourServiceClient(binding, epa); 

, hiçbir yapılandırma dosyası gereklidir - Koddaki her şeyi tanımladın. Tabi ki, kodunuzdaki bağlayıcı ve/veya son noktanızın diğer özelliklerini de ayarlayabilirsiniz.

+4

Bu tam olarak ne ** ihtiyacım olan **. Buna ne kadar minnettar olduğumu söyleyemem! – campbelt

+0

"YourServiceClient proxy = new YourServiceClient();" nedir? ? arayüz mü? Müşterinin son noktasının adı mı? App.config XAML'de etiketine isim eklememe izin vermiyor. –

9

Arabirimi tanımlayan aksamla ilgili bir başvuru varsa, bir WCF hizmetini kullanmanın bir doğu yolu, System.ServiceModel.ChannelFactory sınıfını kullanıyor.

Eğer BasicHttpBinding kullanmak istiyorum Örneğin,: Eğer servis derlemesine yoksa

var emailService = ChannelFactory<IEmailService>.CreateChannel(new BasicHttpBinding(), new EndpointAddress(new Uri("http://some-uri-here.com/)); 

, o zaman için oluşturulan proxy sınıfı aşırı kurucular birini kullanabilirsiniz ciltleme ayarlarını belirtin.

+0

Teşekkür ederiz, eulerfx. Tüm bunlara yeniyim, bu yüzden veriyi içerdiğinde değişkeni nasıl kullanacağımı bilmiyorum ama bu açıyı keşfedeceğim ve nereye götüreceğimi göreceğim. – campbelt

+0

Çok teşekkür ederim! Bunu önermek için aşağıdaki adreste bulunan kaynakla birlikte önerinizi kullanabildim: http://msdn.microsoft.com/en-us/library/ms734681.aspx – campbelt

+0

Arg ... Bu benim test uygulamasının app.config içinde bulunan system.serviceModel bölümü olmadan gayet iyi çalışmasına izin verirken, bazı nedenlerden dolayı hala gerçek uygulamadan aynı hatayı alıyorum.Araştırmaya devam edeceğim. – campbelt