2010-06-14 9 views
9

में वेबहट्प बाइंडिंग एंडपॉइंट का पर्दाफाश करें मैंने एक डब्ल्यूसीएफ सेवा बनाई और तीन एंडपॉइंट्स का पर्दाफाश किया जो मूल हैंप्टिंग बाइंडिंग, wsHttp बाइंडिंग और वेब एचटीपी बाइंडिंग। यह डब्ल्यूसीएफ के साथ मेरे प्रयोगों के लिए एक परीक्षण सेवा है। लेकिन, जब भी मैं .svc फ़ाइल का उपयोग कर सेवा संदर्भ जोड़ता हूं, मुझे केवल दो (मूल और ws) अंतराल मिलते हैं। ऐसा लगता है कि किसी कारण से तीसरा (webHttpBidning) एंडपॉइंट प्रकट नहीं हुआ है।डब्लूसीएफ सेवा

इस समस्या को पुनः करने के लिए, एक WCF आवेदन परियोजना बनाने, Service1 सेवा को मिटाने, नया आइटम> TestService नामित WCF सेवा जोड़ने के लिए, और निम्न के कॉन्फ़िग फ़ाइल बदलने के लिए:

<system.serviceModel> 
<services> 
    <service name="WcfTestService.TestService" behaviorConfiguration="TestServiceBehavior"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost/WcfTestService/TestService.svc"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="basic" 
       binding="basicHttpBinding" 
       contract="WcfTestService.ITestService" /> 
    <endpoint address="ws" 
       binding="wsHttpBinding" 
       contract="WcfTestService.ITestService" /> 
    <endpoint address="web" 
       binding="webHttpBinding" 
       contract="WcfTestService.ITestService" /> 
    <endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="TestServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="webBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

यहाँ

[ServiceContract] 
public interface ITestService 
{ 
    [OperationContract] 
    [WebInvoke] 
    Boolean ValidateUser(User user); 
} 

[DataContract] 
public class User 
{ 
    [DataMember(Name = "Name")] 
    public String UserName { get; set; } 
    [DataMember] 
    public String Password { get; set; } 
} 

और TestService.svc

के लिए: ITestService.cs के लिए कोड है
public class TestService : ITestService 
{ 
    public bool ValidateUser(User user) 
    { 
     if (user.UserName == "User" && user.Password == "123") 
     { 
      return true; 
     } 
     return false; 
    } 
} 

मैंने वेबइवोक पैरामीटर और वेबगेट पैरामीटर के विभिन्न संयोजन की कोशिश की, लेकिन असफल रहा।

क्या कोई मुझे बता सकता है कि डब्ल्यूएसडीएल फ़ाइल में तीसरा एंडपॉइंट क्यों नहीं दिख रहा है?

उत्तर

5

@decyclone: ​​मैंने बिना किसी समस्या के webHttp बाइंडिंग का सफलतापूर्वक खुलासा किया है। लेकिन जब यह खुलासा हुआ और जब यह नहीं हुआ तो मुझे कुछ रोचक चीज़ मिली!

मैं वेब बाध्यकारी डब्ल्यूसीएफ टेस्ट क्लाइंट में उजागर देख सकता हूं।

यहाँ मेरी विन्यास यहां ध्यान देने योग्य है, इसके ठीक काम कर रहा फ्रेमवर्क 3.5, फ्रेमवर्क 3.5 के साथ VS2010, VS2010 जब मैं का उपयोग करें और फ्रेमवर्क 4.0 के साथ VS2008 का उपयोग कर तो मैं WebHttpBinding हो रही नहीं देख सकते हैं

<services> 
    <service behaviorConfiguration="TestWeb.Service2Behavior" name="TestWeb.Service2"> 
    <endpoint address="" binding="wsHttpBinding" contract="TestWeb.Service2"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="web" binding="webHttpBinding" contract="TestWeb.Service2"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

प्वाइंट हैं डब्ल्यूसीएफ टेस्ट क्लाइंट में उजागर किया गया, हालांकि मैं सभी मामलों में http पोस्ट करने के लिए उस बिनिडिंग का उपयोग कर सकता हूं।

मुझे लगता है कि फ्रेमवर्क 4.0 में यह डिफ़ॉल्ट रूप से दिखाई नहीं देता है, यहां तक ​​कि मैं एंडपॉइंट डिस्कवरी को सक्षम करने की कोशिश करता हूं लेकिन अभी भी कोई भाग्य नहीं है!

मैं अपने post

2

आपका "वेब" एंडपॉइंट JSON एंडपॉइंट के रूप में उजागर किया जाएगा। यह डब्ल्यूएसडीएल के साथ संगत नहीं है।

+2

तो, क्लाइंट कैसे पता लगाता है कि कौन सी विधियों/प्रकारों का खुलासा होता है जब WebHttp बाइंडिंग का उपयोग करने वाला केवल एक अंतराल होता है? – decyclone

+0

मुझे वास्तव में पता नहीं है (कैसे jQuery मेटाडेटा स्थानांतरित करता है)। एक और सवाल हो सकता है। –

+0

@decyclone: ​​नीचे दिए गए अपने अनुवर्ती प्रश्न का उत्तर देखें। – BillVo

0

WebHttpBinding में इस व्यवहार को शामिल किया System.ServiceModel.Web में है। यदि आप बनाम 2010 का उपयोग कर रहे हैं, तो अपनी परियोजना के गुणों पर जाएं, लक्ष्य ढांचे की जांच करें। डिफ़ॉल्ट रूप से यह .Net Framework 4 क्लाइंट प्रोफ़ाइल को इंगित करता है। इसे .Net Framework 4 पर इंगित करना चाहिए, फिर आप System.ServiceModel.Web को संदर्भित कर सकते हैं जब आप संदर्भ

0

@decyclone: ​​एक तरीका है कि एक जावास्क्रिप्ट क्लाइंट वेब पर उपलब्ध विधियों को सीख सकता है Http बाइंडिंग डाउनलोड करना है एचटीएमएल स्क्रिप्ट टैग्स के साथ एक डब्ल्यूसीएफ जावास्क्रिप्ट प्रॉक्सी जो आपके एंडपॉइंट पर इंगित करता है "/ जेएस": <script src="http://localhost/WcfTestService/TestService.svc/web/js"></script>

संबंधित मुद्दे