2012-05-24 8 views
10

में संस्कृति को बदलने में असमर्थ मैं विंडोज 2008 सर्वर पर चल रहा हूं। मेरे पास एक वेब सेवा है जो एक डब्ल्यूसीएफ सेवा कहती है। डब्ल्यूसीएफ सेवा के भीतर यह 20/08/2010 की तारीख डालने का प्रयास करता है जो विफल रहता है क्योंकि यह यूएस प्रारूप में इसे ऑस्ट्रियाई नहीं मानता है।डब्ल्यूसीएफ

अब तक मेरे पास है:

  • नियंत्रण कक्ष पर प्रारूप
  • के तहत अंग्रेजी ऑस्ट्रेलियाई करने के लिए क्षेत्र बदलने के प्रशासनिक टैब मैं भी प्रणाली स्थानीय निर्धारित किया है English (Austrlian)
  • को IIS7 भीतर के तहत डिफ़ॉल्ट वेब साइट स्तर मैंने नेट वैश्वीकरण के तहत संस्कृति और यूआई संस्कृति को बदल दिया है।
  • मैं भी वेब सेवा पर यह कर लेते हैं और WCF नोड्स

मैं जोड़ लिया है वेब सेवा के लिए निम्न और WCF web.config फ़ाइल एप्लिकेशन

<globalization requestEncoding="utf-8" 
       responseEncoding="utf-8" 
       culture="en-AU" 
       uiCulture="en-AU" /> 

यह अंत में संस्कृति बदल वेब सेवा में लेकिन डब्ल्यूसीएफ सेवा अमेरिकी संस्कृति बनी हुई है।

क्या कोई मुझे बता सकता है कि मैं और क्या कोशिश कर सकता हूं?

+0

आप पोस्ट को संपादित कर सकते हैं (क्योंकि मैं नहीं कर सकता) और अपने web.config अंश प्रारूपित करें ctrl + के साथ। –

उत्तर

2

समस्या उस संस्कृति में है जो एप्लिकेशन पूल में उपयोग किए गए उपयोगकर्ता के लिए सेट है।

  1. अनुप्रयोग पूल का उपयोग करता है ApplicationPoolIdentity NETWORKSERVICE (दुर्भाग्य से मैं नहीं मिला था ApplicationPoolIdentity के लिए क्षेत्रीय सेटिंग सेट करने का तरीका)
  2. क्षेत्रीय सेट करने के लिए इसे बदल:

    मैं इस समस्या को हल करने के लिए निम्न रास्ता मिल गया मौजूदा उपयोगकर्ता पर आपको सेटिंग्स (एन-एयू) की आवश्यकता है और here वर्णित सिस्टम खातों के लिए उन्हें कॉपी करने के बजाय।

+0

आप एक नई एप्लिकेशन पूल पहचान बनाने के लिए चरण 2 में इस दृष्टिकोण का उपयोग कर सकते हैं जिसमें सही संस्कृति होगी। सेटिंग्स की प्रतिलिपि बनाते समय नए खातों पर लागू करें चेक बॉक्स, रीबूट करें, और फिर नया ऐप पूल बनाएं। – nuander

6

WCF अपने भूमंडलीकरण विन्यास पर ध्यान नहीं देगा आप ASPNET संगतता सेट नहीं करते:

<system.serviceModel>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
... 

कि मोड का उपयोग करने के लिए आपकी सेवा वर्ग विशेषता AspNetCompatibilityRequirements अनुमति के लिए सेट या होना आवश्यक आवश्यक:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class ServiceClass 
{ 
... 
} 

यदि आप कॉन्फ़िगरेशन फ़ाइल से संस्कृति और संस्कृति यूआई लागू करना चाहते हैं तो यह काम कर सकता है।

या आप या तो अपने डब्ल्यूसीएफ सेवा कोड में संस्कृति को मजबूर करने का प्रयास कर सकते हैं, अगर आपको यकीन है कि यह गतिशील रूप से नहीं बदलेगा। उदाहरण के लिए, आपके सेवा वर्ग निर्माता में। ध्यान दें कि यह एक सर्वोत्तम अभ्यास नहीं है, शायद आपको एक संदर्भ प्रारंभकर्ता का उपयोग करना चाहिए, लेकिन यह एकदम सरल है।

public ServiceClass() 
{ 
    ... 
    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-AU"); 
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-AU"); 
} 

और जानकारी:

setting-cultureinfo-on-wcf-service-calls

using-call-context-initializers-for-culture

0

आप Application_Start फ़ाइल में Global.asax.cs फाइल में यह कर सकते हैं,:

using System.Threading; 
using System.Globalization; 

public class Global : HttpApplication 
{ 
    protected void Application_Start(object sender, EventArgs e) 
    { 
     CultureInfo.DefaultThreadCurrentCulture = CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-AU"); 
    } 
}