在iis托管的wcf服务中传递文化值这是我的代码..privateIHelloWorldChannelFactoryWebService(){ServiceEndpointtcpEndPoint=newServiceEndpoint(IHelloWorld)),newNetTcpBinding(),newEndpointAddress("net.tcp://myserver/CultureTest/Service.svc"));ChannelFactoryfactory=newChannelFactory(tcpEndPoint);factory.Endpoint.Behaviors.Add(newCultureBehaviour());返回工厂.CreateChannel();}[TestMethod]<------------失败测试----publicvoidChangingCultureWASViaEndPointTest(){IHelloWorldclient=ChannelFactoryWebService();CultureInfocultureInfo=newCultureInfo("ar-SA");Thread.CurrentThread.CurrentCulture=cultureInfo;客户端.你好();字符串culture=client.HelloCulture();Assert.AreEqual("ar-SA",文化);<---在这里失败..我得到了en-US文化}[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,IncludeExceptionDetailInFaults=true)]publicclassServer:IHelloWorld{#regionIHelloWorldMemberspublicvoidHello(){Console.WriteLine(string.Format("Helloworldfromtheserverinculture{0}",Thread.CurrentThread.CurrentCulture.Name));}publicstringHelloCulture(){stringcultureName=Thread.CurrentThread.CurrentCulture.Name;返回文化名;}#endregion}[ServiceContract]publicinterfaceIHelloWorld{[OperationContract]voidHello();[OperationContract]stringHelloCulture();}publicclassCultureMessageInspector:IClientMessageInspector,IDispatchMessageInspector{privateconststringHeaderKey="culture";#regionIDispatchMessageInspector成员publicobjectAfterReceiveRequest(refSystem.ServiceModel.Channels.Messagerequest,System.ServiceModel.IClientChannelchannel,System.ServiceModel.InstanceContextinstanceContext){intheaderIndex=request.Headers.FindHeader(HeaderKey,string.Empty);如果(headerIndex!=-1){Thread.CurrentThread.CurrentCulture=newCultureInfo(request.Headers.GetHeader(headerIndex));}返回空值;}publicvoidBeforeSendReply(refSystem.ServiceModel.Channels.Messagereply,objectcorrelationState){}#endregion#regionIClientMessageInspectorMemberspublicvoidAfterReceiveReply(refSystem.ServiceModel.Channels.Messagereply,objectcorrelationState){}publicobjectBeforeSendRequest(refSystem.ServiceModel.Channels.Message请求,System.ServiceModel.IClientChannel通道){request.Headers.Add(MessageHeader.CreateHeader(HeaderKey,string.Empty,Thread.CurrentThread.CurrentCulture.Name));返回空值;}#endregion}publicclassCultureBehaviour:IEndpointBehavior{#regionIEndpointBehavior成员publicvoidAddBindingParameters(ServiceEndpointendpoint,System.ServiceModel.Channels.BindingParameterCollectionbindingParameters){}publicvoidApplyClientBehavior(ServiceEndpointendpoint,System.ServiceModel.Dispatcher.ClientRuntimeclientRuntime){CultureMessageInspectorinspector=newCultureMessageInspector();clientRuntime.MessageInspectors.Add(检查员);}publicvoidApplyDispatchBehavior(ServiceEndpointendpoint,System.ServiceModel.Dispatcher.EndpointDispatcherendpointDispatcher){CultureMessageInspectorinspector=newCultureMessageInspector();endpointDispatcher.DispatchRuntime.MessageInspectors.Add(检查员);}publicvoidValidate(ServiceEndpointendpoint){}#endregion}publicclassCultureBehaviorExtension:BehaviorExtensionElement{//BehaviorExtensionElement成员publicoverrideTypeBehaviorType{get{returntypeof(Cultureobjhavior}prot)ed};(){返回新的CultureBehaviour();服务托管站点的Web配置如下所示:我的问题是,当我通过网站托管的服务时,在下面的代码中,我无法获得ar-SAI'我已经尽力在这里澄清这个问题。请让我知道还有什么需要澄清的。[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,IncludeExceptionDetailInFaults=true)]publicclassServer:IHelloWorld{#regionIHelloWorldMemberspublicvoidHello(){Console.WriteLine(string.Format("Helloworldfromtheserverinculture{0}",Thread.CurrentThread.CurrentCulture.Name));}publicstringHelloCulture(){stringcultureName=Thread.CurrentThread.CurrentCulture.Name;Console.WriteLine("******************************你好****************************************”);安慰。写行(文化名);返回文化名;}#endregion}这并不是特定代码为何不起作用的真正答案,但您为什么不发送区域性字符串并将其设置在WCF服务的方法中?我们通常就是这样做的,或者如果它是经过身份验证的用户,只需将其保存在用户身上,这样他们就可以切换到任何语言,而不管计算机配置如何。以上就是C#学习教程:在iis托管的wcf服务中传递文化价值分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
