2013-07-10 6 views
5

मेरा अनुबंध विवरण नीचे दिया गया है। मैं जेसन प्रतिक्रिया और अनुरोध प्रारूप का उपयोग कर रहा हूं और POST विधि का भी उपयोग कर रहा हूं। सी # में इस सेवा का उपभोग करने के लिए क्लाइंट कैसे लिखें।सी # में डब्ल्यूसीएफ आरईएसटी सेवा का उपभोग कैसे करें?

[OperationContract()] 
[WebInvoke(UriTemplate = "/RESTJson_Sample1_Sample1Add", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
int RESTJson_Sample1_Sample1Add(Int32 a, Int32 b, Int32 c); 
+4

कृपया से हम आपके लिए समस्या को हल करने के लिए न कहें। हमें दिखाएं कि _you_ ने समस्या को हल करने का प्रयास कैसे किया, फिर हमें दिखाएं कि परिणाम क्या था, और हमें बताएं कि आपको ऐसा क्यों लगता है कि यह काम नहीं करता है। देखें "[आपने क्या प्रयास किया है?] (Http://whathaveyoutried.com/)" एक उत्कृष्ट लेख के लिए जिसे आपको केवल पढ़ने की आवश्यकता है। –

उत्तर

0

आप सी # से आराम सेवा का उपभोग करने चाहते हैं तो आप RestSharp पर एक नज़र ले जा सकते हैं। ध्यान दें कि डब्ल्यूसीएफ के साथ आप एक अलग एंडपॉइंट पर मूलभूत बाध्यकारी का उपयोग करके उसी विधि का पर्दाफाश कर सकते हैं और इसे SOAP का उपयोग कर उपभोग कर सकते हैं।

आप वेबChannelFactory पर भी एक नज़र डाल सकते हैं, लेख के अंत में this MSDN tutorial देखें।

+0

हाय, क्या सी # का उपयोग करके इसका उपभोग करने का कोई और तरीका है? –

+0

केवल .NET ढांचे का उपयोग करके एक आसान तरीके से नहीं, नहीं। Http://nuget.org/packages/HttpClient दस्तावेज़ पर माइक्रोसॉफ्ट द्वारा एचटीपी क्लाइंट नामक एक एक्सटेंशन जारी किया गया है http://www.bizcoder.com/index.php/2012/01/09/httpclient-it- जीवन-और-यह-गौरवशाली/ – ranieuwe

+1

इसके अलावा, इस समान पोस्ट को देखें http://stackoverflow.com/questions/8883656/how-to-consume-a-restful-service-in-net – ranieuwe

2

नीचे के रूप में की कोशिश:

[OperationContract()] 
    [WebInvoke(UriTemplate = "/RESTJson_Sample1_Sample1Add?A=a&B=b&C=c", Method = "POST", 
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    int RESTJson_Sample1_Sample1Add(Int32 a, Int32 b, Int32 c); 

     var httpWebRequest = (HttpWebRequest)WebRequest.Create("/RESTJson_Sample1_Sample1Add?A=a&B=b&C=c"); 
     httpWebRequest.ContentType = "text/json"; 
     httpWebRequest.Method = methodType;//POST/GET 
     string responseText = ""; 
     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      streamWriter.Write(body);//any parameter 
     } 
     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      responseText = streamReader.ReadToEnd(); 
     } 
     return responseText; 
+0

अच्छा उदाहरण। एक प्रश्न। WebRequest.Create विधि में गुजरने वाला "serviceURL" रीस्टफुल उरी प्रेजेंट्सपी: // {डोमेन नाम}/RestJson_Sample ... (ऊपर दिए गए उदाहरण का उपयोग करके) है? – beaumondo

+0

मान लीजिए कि मेरे पास 3 पूर्णांक पैरामीटर है, तो मैं इसे कैसे पास कर सकता हूं? –

+0

मेरे अपडेट किए गए उत्तर – Amit

2

यहाँ मैं WCF बाकी हिस्सों में POST पद्धति के लिए कोड काम कर रहा है: -

प्रथम आईडी, uname और लोक निर्माण विभाग के क्षेत्रों के साथ डेटाबेस तालिका बनाएँ। मूल्यों को सम्मिलित करने के लिए संग्रहीत प्रक्रिया बनाएं।

create procedure [dbo].[sproc_Insertusers] 
(
@id int out, 
@uname nvarchar(50), 
@pwd nvarchar(50) 
) 
as insert into tbl_register 
(
[uname], 
[pwd] 
) 
values 
(
@uname, 
@pwd 
) 

set @id = @@identity 
return @id 

नई WCF प्रोजेक्ट बना

IService1.cs में

[ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "user_register/{uname}/{pwd}")] 
     int user_register(string uname,string pwd); 
    } 

Service1.cs

public class Service1 : IService1 
    { 
     SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["iwealth_db"]); 
     SqlCommand cmd; 
     DataSet ds; 
     SqlDataAdapter da; 
     int result; 
     public int user_register(string uname, string pwd) 
     { 
      cmd = new SqlCommand("sproc_Insertusers", cn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@uname",uname); 
      cmd.Parameters.AddWithValue("@pwd", pwd); 
      cmd.Parameters.Add("@id", SqlDbType.Int); 
      cmd.Parameters["@id"].Direction = ParameterDirection.Output;//Output parameter 

      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 

      result = (int)(cmd.Parameters["@id"].Value); 
      return result;//returning id 
     } 
    } 
web.config में

में: -

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="iwealth_db" value="Data Source=localhost;Initial Catalog=iwealth; Trusted_Connection=true"/>  
    </appSettings> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="iWealthService.Service1" behaviorConfiguration="ServiceBehaviour"> 
     <!-- Service Endpoints --> 
     <!-- Unless fully qualified, address is relative to base address supplied above --> 
     <endpoint address ="" binding="webHttpBinding" contract="iWealthService.IService1" behaviorConfiguration="web"> 
      <!-- 
       Upon deployment, the following identity element should be removed or replaced to reflect the 
       identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
       automatically. 
      --> 
     </endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 

डब्ल्यूसीएफ बनाएं।

protected void Button1_Click(object sender, EventArgs e) 
    { 
//in 'sURL' paste WCF service link up to .svc and write -> /user_register/Prateek/1234 
//here user_register is service method path and Prateek and 1234 are parameters that will enter to database 


     string sURL = "http://localhost:49271/Service1.svc/user_register/Prateek/1234"; 

     WebRequest wrGETURL; 
     wrGETURL = WebRequest.Create(sURL); 
     wrGETURL.Method = "POST"; 
     wrGETURL.ContentType = @"application/json; charset=utf-8"; 
     HttpWebResponse webresponse = wrGETURL.GetResponse() as HttpWebResponse; 

     Encoding enc = System.Text.Encoding.GetEncoding("utf-8"); 
     // read response stream from response object 
     StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(), enc); 
     // read string from stream data 
     strResult = loResponseStream.ReadToEnd(); 
     // close the stream object 
     loResponseStream.Close(); 
     // close the response object 
     webresponse.Close(); 
     // assign the final result to text box 
     Response.Write(strResult); 
    } 
-: अब, नीचे दिए गए कोड का उपयोग कैसे करें या उपभोग करने के लिए इस WCF सेवा

इस WCF सेवा

और बटन क्लिक कोड पर परीक्षण करने के लिए

जोड़ें रजिस्टर बटन नई वेबसाइट बनाएं है

+1

धन्यवाद कोड साझा करने के लिए प्रतेक गुप्ता। यह मेरी बहुत मदद करता है। आराम से सेवा के लिए सेवा लेने के दौरान सेवा संदर्भ जोड़ने की कोई जरूरत नहीं है, क्या ऐसा है? असल में मैं उपभोग करते समय सेवा संदर्भ जोड़ने की कोशिश कर रहा था। यही कारण है कि मेरी क्लाइंट वेब कॉन्फ़िगरेशन फ़ाइल थी एंडपॉइंट नहीं है। यूआर कोड ने मेरी मदद की। क्या मैं ब्राउज़र के माध्यम से सीधे सेवा का उपभोग कर सकता हूं। लोग ब्राउज़र में यूआरएल दर्ज करते हैं और हिट करते हैं। http://http: // localhost: 49271/Service1.svc/user_register/Prateek/1234'I इस तरह nt.Means क्लाइंट ब्राउज़र में यूआरएल दर्ज कर सकता है और हिट करने के बाद, क्लाइंट को मारने के बाद स्वीकृति –

+1

उपरोक्त उदाहरण 'POST' विधि का है। यदि आप IService1.cs फ़ाइल में 'GET' डालते हैं, तो यह ब्राउज़र में भी काम करेगा। –

+0

आपकी टिप्पणी के लिए धन्यवाद। मैंने किया है कि यह ठीक से काम कर रहा है। मैं ब्राउज़र के माध्यम से इसका परीक्षण करने में सक्षम हूं। लेकिन पाने के बजाय पोस्ट विधि का उपयोग करना बेहतर है.अब हम यूआरएल अनुरोध की जांच के लिए क्लाइंट को इंटरफेस दे रहे हैं। इसलिए कोई ज़रूरत नहीं है ब्राउज़र। –

2

डब्ल्यूसीएफ आराम सेवा का उपभोग करने के लिए, Web.config में परिवर्तन करने की कोई आवश्यकता नहीं है। डब्ल्यूसीएफ आराम सेवा की POST विधि का उपभोग करने के लिए नीचे कोड खोजें।

 DataContractJsonSerializer objseria = new DataContractJsonSerializer(typeof(StudentDetails)); 
     MemoryStream mem = new MemoryStream(); 
     objseria.WriteObject(mem, stu); 
     string data = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length); 
     WebClient webClient = new WebClient(); 
     webClient.Headers["Content-type"] = "application/json"; 
     webClient.Encoding = Encoding.UTF8; 
     webClient.UploadString("http://localhost:62013/Service1.svc/ADDStudent", "POST", data); 

Reference link

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