मैंने तीन असेंबली बनाई हैं। एक वेबसाइट, एक डब्ल्यूसीएफ सेवा और एक अनुबंध असेंबली जो सेवाओं को लागू करने वाले इंटरफेस रखती है। मैं क्लाइंट (वेबसाइट) पर मेरे लिए सेवाएं बनाने के लिए कैसल विंडसर का उपयोग करना चाहता हूं ताकि मुझे प्रत्येक सेवा के लिए वेब साइट के web.config में अंतराल न हो।क्लाइंट एंडपॉइंट्स बनाने के लिए कैसल विंडसर WcfFacility का उपयोग
मैं अनुबंध असेंबली को देखना चाहता हूं और नामस्थान में सभी सेवा इंटरफेस प्राप्त करना चाहता हूं। कंटेनर के साथ घटकों को पंजीकृत करते समय अभी प्रत्येक सेवा के लिए मेरे पास कुछ ऐसा है।
container.Register(Component.For<ChannelFactory<IMyService>>().DependsOn(new { endpointConfigurationName = "MyServiceEndpoint" }).LifeStyle.Singleton);
container.Register(Component.For<IMyService>().UsingFactoryMethod((kernel, creationContext) => kernel.Resolve<ChannelFactory<IMyService>>().CreateChannel()).LifeStyle.PerWebRequest);
और मेरे web.config में मेरे पास सेटअप कोड है।
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="AuthToken" type="MyNamespace.Infrastructure.AuthTokenBehavior, MyNamespace.Contracts" />
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior>
<AuthToken />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"></readerQuotas>
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint name="MyServiceEndpoint" address="http://someurl/MyService.svc" binding="wsHttpBinding" contract="MyNamespace.Contracts.IMyService"></endpoint>
</client>
</system.serviceModel>
मैं कई सेवा अंतिमबिंदुओं कि सभी लगभग बिल्कुल एक जैसे दिखाई और जब हम ग्राहकों मशीनों पर तैनात वे हर endpoint की पता सेट करने के भले ही आधार यूआरएल हर एक के लिए एक ही है साथ खत्म।
मैं अपने वेब.कॉन्फिग में आधार यूआरएल रखना चाहता हूं जो कोड के माध्यम से पकड़ा जाता है और उसके बाद ठेके असेंबली पर प्रतिबिंब का उपयोग करके कंटेनर के साथ पंजीकृत सेवाएं होती हैं। मुझे उपरोक्त कॉन्फ़िगरेशन फ़ाइल में विशिष्ट एंडपॉइंट व्यवहार की आवश्यकता है।
जहां से मैं शुरू करता हूं? WcfFacility बहुत अच्छा लग रहा है लेकिन डॉको की कमी है ...
है कि एक तरह काम करता है आकर्षण, बहुत बहुत धन्यवाद। –
यह क्या करता है? (f => f.CloseTimeout = TimeSpan.Zero) –
यह सभी सेवाओं के लिए डिफ़ॉल्ट क्लोजटाइम सेट करता है - यह "एक टाइमस्पैन मान है जो पूर्ण करने के लिए बंद किए गए ऑपरेशन के लिए प्रदान किए गए समय के अंतराल को निर्दिष्ट करता है। यह मान अधिक से अधिक होना चाहिए या शून्य के बराबर। डिफ़ॉल्ट 00:01:00 है। " - http://msdn.microsoft.com/en-us/library/ms731361.aspx से। यहां एक अच्छा धागा भी है जो सभी संभावित टाइमआउट के बारे में बात करता है: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ – kmp