2012-01-15 20 views
5

İki farklı istemciye göstermem gereken bir IIS7 barındırılan hizmetim var. Müşteriden biri için diğerinden daha sıkı bir Throttling davranışı uygulamak zorundayım.WCF Tek Servis Uygulaması, Çoklu Davranışlar. Mümkün

Bu, İki etiketi tanımlamanız gerektiği ve bunların yalnızca bir etiketten kaynaklanabileceğinden, bunlardan iki tanesine de ihtiyacım olduğu anlamına mı geliyor?

Aşağıdaki web.config dosyasını tanımladım.

Parser Error Message: A child element named 'service' with same key already exists at the same configuration scope. 
Collection elements must be unique within the same configuration scope (e.g. the same application.config file). Duplicate key value: 'WCFTwoEndpoints.Calculate'. 

Bu konuda doğru yolu mıyım: Ben aşağıdaki hatayı alıyorum sonra meta çekin böylece her iki servise gözatmak çalıştığınızda Sorun, nedir?

<system.serviceModel> 
    <services> 
     <service name="WCFTwoEndpoints.Calculate" behaviorConfiguration ="NotThrottled"> 
     <endpoint address="http://localhost/WCFTwoEndpoints/Calculate.svc" 
      binding="wsHttpBinding" bindingConfiguration="" name="Calculator" 
      contract="WCFTwoEndpoints.ICalculate" /> 
     <endpoint binding="mexHttpBinding" name="mex" contract="IMetadataExchange" /> 
     </service> 
     <service name="WCFTwoEndpoints.Calculate" behaviorConfiguration ="Throttled"> 
     <endpoint address="http://localhost/WCFTwoEndpoints/ThrottledCalculate.svc" 
      binding="wsHttpBinding" bindingConfiguration="" name="ThrottledCalculator" 
      contract="WCFTwoEndpoints.ICalculate" /> 
     <endpoint binding="mexHttpBinding" name="mex" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="NotThrottled"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     <behavior name="Throttled"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceThrottling maxConcurrentCalls="19" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
+0

Calculate.svc ve ThrottledCalculate.svc – Rajesh

+0

adında 2 farklı .svc dosyası var mı? Evet 2 farklı .svc dosyası var ama ikisi de aynı noktayı gösteriyor. –

+0

Sanırım arkada kodla aynı sınıf adı var Sorun, WCF'nin Hizmet öğelerinin benzersiz olmasını ve aynı ada sahip 2 hizmet öğesinin olmasını bekler. Bir baseclass için işlevselliği zorlayabilir ve daha sonra farklı sınıflar içinde devralabilir, böylece hizmet adlarınız benzersiz olur. – Rajesh

cevap

7

Anahtarın adı, hizmet sınıfınızın adıyla tam olarak eşleşmesi gerektiği için biraz takıldınız.

Bunu düşünebilmemin tek yolu, WCFTwoEndpoints.Calculate'dan miras alınan yeni bir sınıf oluşturmak olacaktır. O zaman ayrı bir ismin olurdu. Yine de pek hoş değil.

 

onlar bunu böyle tasarlanmış neden WCF tasarımcıları sordum, onlar bir serivce müşterinin indepent olması gerekiyordu söyleyebilirim düşünüyorum. Burada istediğiniz şey tek bir hizmet değil; ancak ortak olarak bazı uygulamalara sahip olan iki farklı bağımsız hizmet. Müşteriler açısından bakıldığında, tek bir hizmet gibi davranmayacaklardı.

İlgili konular