2010-01-07 20 views
5

मेरे पास एक वेब सेवा है जिसमें से मुझे HTML युक्त स्ट्रिंग को वापस करने की आवश्यकता है। यह एचटीएमएल एक चयन नियंत्रण के लिए मार्कअप है (jqGrid खोज फ़िल्टर में उपयोग के लिए), उदा।wcf सेवा से वापसी एचटीएमएल

<select><option id='1'> value 1 </option></select> 

मेरे WCF वेब सेवा के लिए एक विधि है कि एक स्ट्रिंग के रूप में मान देता है ...

public string GetLeadTypeSelect() 
{ 
    return "<select><option id='1'> value 1 </option></select>"; 
} 

और इस विधि के लिए अनुबंध में शामिल है:

[OperationContract] 
[WebInvoke(Method = "GET", 
    BodyStyle = WebMessageBodyStyle.Bare, 
    ResponseFormat = WebMessageFormat.Json)] 
string GetLeadTypeSelect(); 

मेरे समस्या यह है कि है बचने वाले पात्रों को स्ट्रिंग में डाला जाता है ताकि लौटाए गए HTML को बेकार कर दिया जा सके - सेवा यह लौटाती है:

"<select><option id='1'> value 1 <\/option><\/select>" 

उद्धरण चिह्न <option> और <select> टैग में उद्धरण चिह्न और '/' से बच निकले दोनों समस्याएं पैदा करती हैं।

jqGrid लटकती प्रदर्शित करने के लिए लौट आए एचटीएमएल का उपयोग करता है ...

filterModel: [ 
    { label: 'Type', name: 'type', stype: 'select', surl: '../../../Services/Leads/GetLeads.svc/GetLeadTypeSelect' }, 

तो, मेरे सवाल है, मैं कैसे इस वेब सेवा से ग्राहक को वापस शुद्ध एचटीएमएल वापस जाने के लिए इतना है कि यह में डाला जा सकता मेरा एचटीएमएल पेज?

किसी भी मदद के लिए अग्रिम धन्यवाद, कॉलिन।

उत्तर

0

मुझे लगता है कि आप इसे जावास्क्रिप्ट के माध्यम से उपयोग करते हैं।

यदि आप एक एस्केप (प्रतिक्रिया) करते हैं, तो आपकी समस्या हल होनी चाहिए।

दूसरी तरफ, यदि आप जावास्क्रिप्ट में इसका उपयोग नहीं करते हैं, लेकिन केवल एएसपी.नेट/PHP/जो भी वेबसाइट आप शायद मूल्यों की एक सरणी लौटकर और मूल्य प्रदर्शित करके बेहतर कर सकते हैं, ताकि आप कर सकें अन्य कोड में webservice का पुन: उपयोग करें।

कोड का आपका टुकड़ा अब केवल HTML वातावरण में काम करता है। क्या होगा यदि आपको कल एक .NET/C++/जो भी ऐप लिखना है जो आपके webservice का उपयोग करता है? फिर आपको इसे बदलना होगा। और यह webservices का मुद्दा नहीं है। वेबसाइट्स कोड की पुन: प्रयोज्यता को बढ़ावा देती हैं। और आप इसके खिलाफ लड़ रहे हैं। (और कोड जीतेंगे!)

+0

उत्तर के लिए धन्यवाद सांप। दुर्भाग्य से मेरे हाथ थोड़ा बंधे हैं। मैं jqGrid का उपयोग कर रहा हूं, और खोज पैरामीटर के लिए डीडीएल बनाने का एकमात्र तरीका है वेब सेवा को कॉल करना जो HTML को लौटाता है। मैंने इसे प्रतिबिंबित करने के लिए प्रश्न संपादित किया है। मेरे पास लौटाई गई स्ट्रिंग में हेरफेर करने की कोई क्षमता नहीं है अन्यथा हाँ मैं जावास्क्रिप्ट में अनदेखा कर सकता हूं। – Col

6

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन एक सेवा है कि केवल IIS में आयोजित किया जाएगा के लिए, यहाँ एचटीएमएल वापस जाने के लिए एक आसान तरीका है:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public Stream getHtml() 
{ 
    // get the html 
    var html = DoSomethingToGetHtml(); //Not a built-in .Net method ;) 

    // we want our result interpreted as plain html 
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/html; charset=utf-8"; 

    // create a stream from our html because trying to return a string adds an extra header tag 
    //  to the response. Returning a stream returns the html by itself 
    var result = new MemoryStream(Encoding.UTF8.GetBytes(html)); 

    // return the result 
    return result; 
} 

इस कोड आवश्यकता है web.config होस्टिंग सेवा में निम्नलिखित:

<system.serviceModel> 
    <!-- enable HttpContext.Current by setting aspNetCompatibilityEnabled=true--> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

    <behaviors> 
     <endpointBehaviors> 
      <behavior name="webHttpEnabled">    
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    ... 
<system.serviceModel> 

सेवा के लिए विन्यास में, behaviorConfiguration="webHttpEnabled" निर्धारित किया है।

इस तरह से एचटीएमएल लौटने से सेवा की पुन: प्रयोज्यता सीमित हो जाती है, लेकिन यदि आप उचित रूप से सुनिश्चित हैं कि सेवा हमेशा आईआईएस में होस्ट की जाएगी तो समस्या को हल करने का यह एक आसान तरीका है।

+0

त्रुटि विशेषता 'AspNetCompatibilityRequirements' इस घोषणा प्रकार पर मान्य नहीं है। यह केवल 'वर्ग' घोषणाओं पर मान्य है। –

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