2013-01-16 21 views
6

İki uç noktası olan bir WCF hizmetine başvuru ekledim.Son nokta elemanını ad ve sözleşme ile bulamadınız

<client> 
    <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1" 
    contract="ABCService.IService" /> 
    <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2" 
    contract="ABCService.IService1" /> 
</client> 

müşteri yaratmak için kod olarak aşağıdaki gibidir: Konfig.Dosyasında dosyasına eklenen olsun aşağıdaki hizmet ekleyerek Açık - "Could not Ancak

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2"); 

, bir çalışma zamanı hatası alıyorum 'ABCServiceV2' adıyla son nokta elemanını bulun ve ServiceModel istemci yapılandırması bölümünde 'ABCService.IService' sözleşmesini bulun. Bunun nedeni, uygulamanız için bir yapılandırma dosyası bulunmaması veya bu öğeyle eşleşen bir son nokta öğesinin istemci öğesinde bulunamaması olabilir. ." ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); kullanmış olsaydım, her şey düzgün çalışıyorsa

. Ancak ABCServiceV2 kullanırken - ABCService.IService1 - aranması gerektiğinde Sözleşme - ABCService.IService - aramak için çalışıyor.

Doğru kontratı nasıl ararım?

+0

ABCServiceV2 için adres Ben onunla ya da değil ilgisi olmadığından emin değilim ... Bir '20' sonuna eklenen vardır. Sadece bir gözlem. – user959729

+0

Son noktayı farklı kılmak için '20' olması gerektiği kadar iyi olmalı. Servisin her iki uç noktası da SoapUI gibi bir araç üzerinde çalışıyor. Yani sorun müşteri kodunda bir yerlerde. – ipoh

cevap

3

Farklı bir hizmete (ABCServiceV2) ikinci bir başvuru eklediyseniz, bunun ABCServiceV2 için ikinci bir hizmet sınıfı oluşturduğuna inanıyorum. İki sınıf ayrı sözleşmeler (ABCService.IService ve ABCService.IService1) uygulayacaktır, böylece uç noktaları birbirleriyle değiştiremezsiniz.

seni o kadar sevdiği iki hizmet uç noktalarını başlatılması gerekir inanıyoruz: Bu yazı eski ve cevap

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); 
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); 
+1

Teşekkürler ... Sorun Service1Client yerine ServiceClient kullanıyordum. Aşağıdaki kod sorunları olmadan çalışır: ABCService.Service1Client ABCClient1 = yeni Service1Client ("ABCServiceV2"); – ipoh

1

olsa da, cevap benim durumumda yardımcı olmadı. Sorunum hizmet istemcisini svcutil.exe aracıyla oluşturdum, ancak hiç bir ad alanı belirtmedim; ve böylece sözleşme ad alanı adı varsayılan olarak şema belgesinin hedef ad alanı olarak oluşturuldu, evet toplam karışıklık.

Diğer taraftan, bir hizmet başvurusu projeye eklendiğinde oluşturulan yapılandırma dosyasını kullanmaya çalışıyordum. Bu dosyadaki sözleşme ad alanı, ServiceReference1 (varsayılan olarak) veya istediğiniz herhangi bir addır, mükemmel fırtınadır! Ancak tek yapmam gereken, FQN'den isim alanı kısmını <endpoint>'un sözleşme niteliğinden kaldırmak ve sözleşme CLR'ye görünür hale geldi.

Umut bu yardım diğerleri