【发布时间】:2013-12-27 11:56:46
【问题描述】:
每次调用 WCF 服务时都需要在 Soap 标头中添加键和值。在后面的代码中 以及我们如何在服务中读取该值。
在我的应用程序中,登录时有 4 个数据库,用户将决定他想登录哪个数据库
请提出一些方法来做到这一点
【问题讨论】:
-
您需要更具体地了解您想要做什么
标签: c# wcf silverlight
每次调用 WCF 服务时都需要在 Soap 标头中添加键和值。在后面的代码中 以及我们如何在服务中读取该值。
在我的应用程序中,登录时有 4 个数据库,用户将决定他想登录哪个数据库
请提出一些方法来做到这一点
【问题讨论】:
标签: c# wcf silverlight
您可以创建一个返回服务客户端对象的方法,如下所示
MyService.ErpServiceClient ServiceClient = new MyService.ErpServiceClient();
EndpointAddressBuilder AddressBuilder = new EndpointAddressBuilder(new EndpointAddress(GetServiceUrl()));
AddressBuilder.Headers.Add(AddressHeader.CreateAddressHeader("MyKey", string.Empty, (App.DataBaseKey == null) ? "" : "MyValue"));
return new MyService.ErpServiceClient(ServiceClient.ChannelFactory.Endpoint.Binding, AddressBuilder.ToEndpointAddress());
在服务端读取密钥
OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("MyKey", "");
【讨论】:
您可以创建一些抽象的 MyServiceRequestBase 类并从它派生所有请求。此基类应存储 DB 名称(或一些标识 DB 的键),并且只有构造函数接受此参数。
这将确保所有 WCF 服务方法(遵循设计规则并具有从您的基类派生的请求参数对象)传递您的参数以进行 DB 识别。
【讨论】: