我有一个WCF服务,我需要为一些不同的文化进行本地化,主要是提供不同语言的错误和响应消息。我倾向于为每个支持文化提供不同的端点,而不是依赖于解析来自请求头的内容。例如,我将在以下行中放置不同的url:
http://server/mycompany-rest/v1.0/service.svc
http://server/mycompany-rest/v1.0/service.svc/fr
http://server/mycompany-rest/v1.0/service.svc/cn
我认为这种方法是可行的,我需要能够配置它在我的网页。按照以下行进行配置:
<system.serviceModel>
<services>
<service name="MyCompany.Service.Rest.SomeService">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="WebBehavior" contract="MyCompany.Service.Rest.ISomeService"/>
<endpoint address="fr" binding="webHttpBinding" behaviorConfiguration="WebBehaviorFrench" contract="MyCompany.Service.Rest.ISomeService"/>
<endpoint address="cn" binding="webHttpBinding" behaviorConfiguration="WebBehaviorChinese" contract="MyCompany.Service.Rest.ISomeService"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<webHttp/>
</behavior>
<behavior name="WebBehaviorFrench">
<webHttp/>
<culture value="fr" />
</behavior>
<behavior name="WebBehaviorChinese">
<webHttp/>
<culture value="zh-cn" />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
我意识到端点行为没有文化元素,但是这种方法对于自定义行为是否可行?或者是否有更好的方法?
关于使用不同的WCF端点进行本地化也有类似的讨论:
http://geekswithblogs.net/dlanorok/archive/2007/07/18/Dynamic-Configuration-for-WCF-Service-Base-Address.aspx似乎这只是关于服务器配置…客户端仍然必须显式地选择以区域性命名的端点。
我的问题更一般…是否有一种方法可以动态地选择基于OperationContext之类的端点…