2009-03-26 11 views
5

Hala tüm WCF olayını öğreniyorum, lütfen burada benimle birlikte olunuz.Bir istemciden birden çok WCF hizmeti nasıl tüketilir?

Sahip olduğum şey, C# ve VS 2008 kullanılarak oluşturulan iki kendiliğinden barındırılan hizmetler:
Service # 1 İki sayı ekler ve sonucu döndürür.
Servis # 2 Bir sayının karesini döndürür.

İstemcinin Service 1'e iki sayıyla gönderilmesini, toplamı almasını ve sonra toplamı Service 2'ye göndermesini ve kareyi almasını istiyorum.

İki hizmet için hem proxy'lere sahibim hem de bunların üzerinde Intellisense kullanabiliyorum, böylelikle bu bölüm çalışıyor.

Artık app.config dosyasımı, her iki hizmetle de iletişim kurabilmem için nasıl yapılandırabilirim? Şu an, bunu her denediğimde bir istisna alıyorum.

[Yalnızca bir seferde uygulama dosyasında yapılandırmasından birini ve sadece o sunucuyu aramayı deneyin eğer istemci çalışıyor.]

Bunun çok noobish soru ve cevap varsayalım Muhtemelen "yapılandırma dosyasını _____ biçiminde yapılandır" dır, ancak Google'ın sadece bir örneği/kılavuzu olmadığı görülüyor.

Bunu nasıl yapacağını bilen var mı?

Not: Consume multiple WCF services from one client İstemci Yinelenen bir ses gibi gelse de, aradığım şey değil.

Düzenleme: Marc_s için sayesinde, burada farklı uygulamalarda çalışan hizmetler, ben sunucu yapılandırma dosyası bölmek gerek yoktu hem Tam

çalışan, ancak var İstemci yapılandırma ile yaptığımız budur dosyalar:

<bindings> 
    <wsHttpBinding> 

    <binding> 
    ... 
    </binding> 

    <binding> 
    ... 
    </binding> 

    </wsHttpBinding> 
</bindings> 

...: bu yolla onları birleşti ardından SvrUtil.exe kullanarak yapılandırma dosyalarını otomatik olarak oluşturulmuştur ve İlk

<endpoint> 

...

+0

1 - Şimdi başkalarının cevapları DÜZENLEME böylece 1,999 den 2K temsilcisi sizi çarpmak kadar oy! woot! –

+0

@Jeremy: Haha teşekkürler! – Mostlyharmless

cevap

3

Eğer ayrı bitiş noktaları/bağlantı noktalarında iki hizmet çalıştırmak istediğiniz böyle bir şey yaparsanız:

Sunucu tarafı:

<service name="Service1"> 
    <endpoint address="http://localhost:8001/service1.asmx" 
      binding="basicHttpBinding" 
      contract="IService1" /> 
</service> 
<service name="Service2"> 
    <endpoint address="http://localhost:8002/service2.asmx" 
      binding="basicHttpBinding" 
      contract="IService2" /> 
</service> 

İstemci taraflı:

<client> 
    <endpoint address="http://localhost:8001/service1.asmx" 
      binding="basicHttpBinding" 
      contract="IService1" 
      name="Service1" /> 
    <endpoint address="http://localhost:8002/service2.asmx" 
      binding="basicHttpBinding" 
      contract="IService2" 
      name="Service2" /> 
</client> 

Sunucu üzerinde iki ayrı, bireysel uç nokta ve her ikisiyle de konuşacak bir istemci vermelisiniz.

Marc

+0

Teşekkürler, işe yaradı! Tüm permütasyonları kapatmak yerine, sadece sormaya karar verdiğim konfigürasyon dosyalarını birleştirmek için çok fazla permütasyon vardı: P – Mostlyharmless

0

sadece uç noktaları çatışması var mı? Örneğin, her iki hizmetin de aynı bağlantı noktası numarasını dinleyecek şekilde yapılandırılmamış olduğundan emin olun. Yapılandırma dosyanızı (veya bu dosyanın sanitize edilmiş bir sürümünü) gönderirseniz yardımcı olabilirsiniz.

+0

Ne kadar süredir takıldığını görmek inanılmaz bir şeydi. İkisinin de aynı bağlantı noktasında çalışmasına izin veriyorum, ancak servis 8'i A noktasından, hem 8000 numaralı portu dinliyorum. Farklı portlarda çalıştırdığımı varsayalım. app.config dosyasını nasıl yapılandırabilirim? – Mostlyharmless

+0

altında birden çok öğeniz ve benzeri var. Tam yapılandırma bölümlerini kopyalayamazsınız, birleştirmeniz gerekir. –

3

Bir App.Config yanıtı istediniz, ancak bunun yardımcı olabileceğini anladığınızı biliyorum. Normalde istemci bağlantılarını programlı olarak ilk önce yapılandırarak başladım, çünkü daha basit ve çalıştıktan sonra App.Config sunucunuza taşıyabilirsiniz.

WCF istemcisinin nasıl yapılandırılacağının bir örneği.

BasicHttpBinding binding = new BasicHttpBinding(); 
EndpointAddress address = new EndpointAddress(serverURL); 
MyServiceClient myServiceProxy = new MyServiceClient(binding, address); 

Daha sonra App.Config aşağıda gibi bir şey olabilir.

<client> 
    <endpoint address="http://localhost/service1.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" 
      contract="IService1" 
      name="Service1" /> 
    <endpoint address="http://localhost/service2.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" 
      contract="IService2" 
      name="Service2" /> 
</client>