- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我的代码..
private IHelloWorld ChannelFactoryWebService()
{
ServiceEndpoint tcpEndPoint = new ServiceEndpoint(
ContractDescription.GetContract(typeof(IHelloWorld)),
new NetTcpBinding(),
new EndpointAddress("net.tcp://myserver/CultureTest/Service.svc"));
ChannelFactory<IHelloWorld> factory = new ChannelFactory<IHelloWorld>(tcpEndPoint);
factory.Endpoint.Behaviors.Add(new CultureBehaviour());
return factory.CreateChannel();
}
[TestMethod] <-------------- FAILING TEST ----
public void ChangingCultureWASViaEndPointTest()
{
IHelloWorld client = ChannelFactoryWebService();
CultureInfo cultureInfo = new CultureInfo("ar-SA");
Thread.CurrentThread.CurrentCulture = cultureInfo;
client.Hello();
string culture = client.HelloCulture();
Assert.AreEqual("ar-SA", culture); <--- fails here.. I get en-US for culture
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, IncludeExceptionDetailInFaults = true)]
public class Server : IHelloWorld
{
#region IHelloWorld Members
public void Hello()
{
Console.WriteLine(string.Format("Hello world from the server in culture {0}", Thread.CurrentThread.CurrentCulture.Name));
}
public string HelloCulture()
{
string cultureName = Thread.CurrentThread.CurrentCulture.Name;
return cultureName;
}
#endregion
}
[ServiceContract]
public interface IHelloWorld
{
[OperationContract]
void Hello();
[OperationContract]
string HelloCulture();
}
public class CultureMessageInspector : IClientMessageInspector, IDispatchMessageInspector
{
private const string HeaderKey = "culture";
#region IDispatchMessageInspector Members
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
int headerIndex = request.Headers.FindHeader(HeaderKey, string.Empty);
if (headerIndex != -1)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(request.Headers.GetHeader<String>(headerIndex));
}
return null;
}
public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
}
#endregion
#region IClientMessageInspector Members
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
request.Headers.Add(MessageHeader.CreateHeader(HeaderKey, string.Empty, Thread.CurrentThread.CurrentCulture.Name));
return null;
}
#endregion
}
public class CultureBehaviour : IEndpointBehavior
{
#region IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
{
CultureMessageInspector inspector = new CultureMessageInspector();
clientRuntime.MessageInspectors.Add(inspector);
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
{
CultureMessageInspector inspector = new CultureMessageInspector();
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
}
public void Validate(ServiceEndpoint endpoint)
{
}
#endregion
}
public class CultureBehaviorExtension : BehaviorExtensionElement
{
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(CultureBehaviour); }
}
protected override object CreateBehavior()
{
return new CultureBehaviour();
}
}
服务托管站点的 Web 配置如下所示:
<endpointBehaviors>
<behavior name="Default">
<CultureExtension/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<!-- 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>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="CultureExtension" type="Extension.CultureBehaviorExtension, Extension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
我的问题是,当我通过网站托管的服务时,在以下代码中,我无法在服务的 Hello 方法中获取 ar-SA 的文化值。我尽力在这里澄清这个问题。请让我知道还有什么需要澄清的。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, IncludeExceptionDetailInFaults = true)]
public class Server : IHelloWorld
{
#region IHelloWorld Members
public void Hello()
{
<--- problem here unable to get culture value of ar-SA here --->
Console.WriteLine(string.Format("Hello world from the server in culture {0}", Thread.CurrentThread.CurrentCulture.Name));
}
public string HelloCulture()
{
string cultureName = Thread.CurrentThread.CurrentCulture.Name;
Console.WriteLine("**************************hello**********************************");
Console.WriteLine(cultureName);
return cultureName;
}
#endregion
}
最佳答案
这并不是特定代码为何不起作用的真正答案,但您为什么不直接发送区域性字符串并将其设置在 WCF 服务的方法中?
这就是我们通常做的方式,或者如果它是经过身份验证的用户,只需将其保存在用户身上,这样他们就可以切换到任何语言,而不管计算机配置如何。
关于c# - 在 iis 托管的 wcf 服务中传递文化值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994697/
如何指定输入字符串的哪一部分是日期和月份? 如果输入是 01/10/2017 ,这可以读作 2017 年 10 月 1 日 和 2017 年 1 月 10 日 .两者都是正确的。 我想明确指出 01是
我的 silverlight 应用程序的数据网格中有一个日期列。我需要以 24 小时格式显示时间。为了实现这一点,我修改了 Application_Startup 事件中的 UI 区域性,如下所示:
对于 CultureInfo,调用 DateTimeFormat.AbbreviatedMonthNames 会返回一个数组,其中每个月都以 . 结束,例如 ['jan .',... 'dis.'].
最近,DevOps的采用导致了企业计算的重大转变。除无服务器计算,动态配置和即付即用成本模型之类的功能外,DevOps的实践对于组织可以发挥一些增值效益,例如提高敏捷性,速度和降低成本,也非常有用。
我一直在努力改变 numbro 的文化。我尝试了简单的方法,但出现错误: Unknown culture : ' + code numbro.culture('fr-FR'); 我尝试过这样的: co
有一个 mvc web 应用程序,CSS 在样式表中编码,将在 View 中使用。 有什么办法可以实现下面的场景: When there is a change of language culture
我的 .NET 4.0 项目中嵌入了字符串资源:Strings.resx 和 Strings.de.resx。 在生产代码中,根据 Strings.Culture 的值检索正确的本地化字符串: Str
如何本地化除今天以外的星期几? 以下内容适用于当天: DateTime.Now.ToString("dddd", new CultureInfo("it-IT")); 但是我怎样才能本地化一周中的所有
你好,我想看看是否有更好的方法将字符串解析为涵盖各种格式的 Decimal 1.30 美元 1.50 英镑 2,50 欧元 2,50 € 2.500,00 € 我看到很多用culture来转换. &
你好,我想看看是否有更好的方法将字符串解析为涵盖各种格式的 Decimal 1.30 美元 1.50 英镑 2,50 欧元 2,50 € 2.500,00 € 我看到很多用culture来转换. &
我的应用程序的每个用户都会选择他们的国家/地区,然后将其存储在 cookie 中并存储以供以后请求。一切正常,但我需要在 session 开始时设置文化。我目前正在尝试将 web.config 中的区
我有一个 CLR .NET dll 和 SQL 服务器。系统本地设置(Region/administrative/locallanaguagesettings)从 en-IN 更改为 en-US。但是
你好, 我正在使用 Windows XP sp2 作为我的开发平台, 我在显示 时遇到问题货币符号 . 你看,对于马来西亚来说,正确的货币符号是 RM , 但是当我使用 uiCulture="ms"c
我用 C# 编写了一个报告渲染器,它运行报告并将报告附加到电子邮件中。这一切都很好,除了在报告标题中列出的参数的日期格式不正确。所有报告的语言都设置为 =User!Language 并且使用 Form
这应该很简单,但我似乎找不到这个问题的答案...... 我正在使用 Visual Studio 2008 开发 C# 应用程序,该应用程序支持多种不同的语言。在开发机器上测试不同的语言很简单(例如临时
我正在尝试运行这条确切的线,但它不工作。有谁知道原因吗? Convert.ToBoolean("verdadero", new System.Globalization.CultureInfo("ES
我对数据库编程不是很熟悉,但我有一个Mysql数据库,我在C#下使用Dblinq访问它。现在,当我输入日期、数字等时,使用英语符号,但我的客户需要德语。如何将我的数据库从英语切换为德语? (数据库仍然
我正在尝试使用以下方法更改内置的 .Net 区域性 fr-CA: CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuild
我的 orderby linq 表达式有问题。它以错误的顺序生成输出。我来自丹麦并创建了一个丹麦语网站,因此订单必须准确无误。 这是我的查询: var model = (from w in db.Ne
是否可以即时更改 WinRT 中的 UI 文化?我找到了 ApplicationLanguages.PrimaryLanguageOverride = "en"; ,但这仅在显示应用程序 UI 之前有
我是一名优秀的程序员,十分优秀!