2009-04-28 43 views
6

Tôi có một dịch vụ WCF đang chạy cần phân tích một số dữ liệu. Nó chỉ ra rằng dữ liệu (điểm, kích cỡ) được chuyển đổi khác nhau trong CultureInfo khác nhau và phân tích được trải ra trong rất nhiều lớp và phương pháp. Vì tất cả các phân tích cú pháp được thực hiện mà không cần truyền bất kỳ CultureInfo nào, sự thành công của việc phân tích cú pháp phụ thuộc vào văn bản chủ đề.Cài đặt CultureInfo về các cuộc gọi dịch vụ wcf?

Vì không có cài đặt có lập trình của CultureInfo nên dịch vụ chọn văn bản hiện tại khỏi máy bằng cách nào đó. Tôi không có ý tưởng nơi nó được điều này, kể từ khi thay đổi cho các tùy chọn ngôn ngữ và khu vực dường như không có bất kỳ tác dụng trên cultureinfo của dịch vụ wcf. Ngoài ra những thay đổi đối với web.config (có dịch vụ được lưu trữ trong iis) dường như không hoạt động.

Tôi có thực sự còn lại chỉ với một tùy chọn không? Cài đặt CultureInfo theo chương trình? Tôi có thể tìm thấy tất cả các cuộc gọi chuyển đổi và vượt qua trong một CultureInfo hoặc tôi có thể đặt nó trên Thread.CurrentThread.CurrentCulture. Có cách nào tôi có thể đặt CultureInfo một lần và cho tất cả - có hiệu lực trên tất cả các phương pháp tiếp xúc wcf?

Trả lời

5

Câu trả lời về việc sử dụng thẻ trong web.config chỉ hoạt động nếu chế độ tương thích Asp.net được bật. Bạn cũng cần những điều sau đây bên trong:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

Nếu không có chế độ tương thích Asp.Net, các mô-đun http không được sử dụng và thẻ bị bỏ qua.

+0

Tôi không biết tại sao tôi bỏ lỡ điều này, cảm ơn :) –

3

Bạn nên kiểm tra bài viết trên blog này ...

http://blogs.msdn.com/drnick/archive/2008/02/26/using-call-context-initializers-for-culture.aspx

... trong đó cho thấy làm thế nào để xác định một hành vi để thiết lập văn hóa.

HOWEVER, web.config phải là bạn của bạn ở đây. Bạn sẽ có thể thiết lập nền văn bản "mặc định" mà dịch vụ của bạn làm việc với từ đây.

Toàn cầu elemenent ...

http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx

... nên cho phép bạn thiết lập văn hóa và UICulture ...

<globalization 
    enableClientBasedCulture="true|false" 
    requestEncoding="any valid encoding string" 
    responseEncoding="any valid encoding string" 
    fileEncoding="any valid encoding string" 

    responseHeaderEncoding = "any valid encoding string" 
    resourceProviderFactoryType = string 
    enableBestFitResponseEncoding = "true|false" 

    culture="any valid culture string" 
    uiCulture="any valid culture string"/> 
+0

Bài đăng trên blog rất hay nhưng trong trường hợp của tôi nó có nghĩa là viết lại dịch vụ một chút, như đối với phần tử toàn cầu hóa - tôi đã thử nó nhưng nó không hoạt động - tôi đoán tôi sẽ thử lại, có lẽ tôi đã sai lên :) –

+0

Phần tử toàn cầu hóa dường như không có bất kỳ ảnh hưởng nào đến văn hóa của chuỗi wcf. –

+0

Bạn có điều gì khác có thể ảnh hưởng đến văn hóa không? Web.config shoulld làm việc. Có khả năng nào bạn có thể hiển thị cho chúng tôi mã đang gặp sự cố không? Bạn đang rõ ràng với văn hóa mà bạn đang sử dụng. Ví dụ: nếu bạn đang gọi String.Format thì bạn có đang sử dụng quá tải mất một CultureInfo không? –

0

Bạn có thể sử dụng tập tin cấu hình như Martin đề cập ở trên nhưng thực hành tốt, bạn chắc chắn nên đặt thông tin văn hóa ở bất cứ đâu cần thiết cho InvariantCulture để phục vụ cho dữ liệu được gửi qua các miền địa phương khác nhau. tức là ngày, chuỗi, số

+0

Điểm tốt. Đây thực sự là kiểm tra Phân tích Mã khi sử dụng phân tích mã VSTS. – BinaryMisfit

+0

Vâng - nếu bạn chạy mã thông qua FXCop và kiểm tra các quy tắc Toàn cầu hóa, nó sẽ chỉ ra tất cả những nơi mà nền văn hóa cần được xác định. – Madeleine

+0

Có nhưng đây là mã kế thừa và tôi không phải thiết lập phân tích mã hoặc viết lại nó nếu có thể. –

Các vấn đề liên quan