WCF服务将使用另一个Wcf服务.现在,我想创建通道工厂对象并手动缓存它.我知道表现会很好,但会引起任何其他问题的关注.
我发现信息如下:
"使用ChannelFactory,您仍然可以使用自己的自定义MRU缓存实现通道工厂缓存.这仍然意味着一个重要的限制:对共享通道工厂的同一服务端点的调用也必须共享相同的凭据.这意味着您无法传递不同的凭据对于从Web服务器层调用应用程序服务的每个线程.如果您使用相同的证书或Windows凭据对下游服务进行身份验证,则会出现这种情况.在这种情况下,如果您需要传递有关经过身份验证的用户的信息,您可以使用自定义标头而不是安全令牌."
链接:http://devproconnections.com/net-framework/wcf-proxies-cache-or-not-cache
我在Google中找到了一个示例代码,如下所示.
internal delegate void UseServiceDelegate<in T>(T proxy);
internal static class Service<T>
{
private static readonly IDictionary<Type, string>
cachedEndpointNames = new Dictionary<Type, string>();
private static readonly IDictionary<string, ChannelFactory<T>>
cachedFactories =
new Dictionary<string, ChannelFactory<T>>();
internal static void Use(UseServiceDelegate<T> codeBlock)
{
var factory = GetChannelFactory();
var proxy = (IClientChannel)factory.CreateChannel();
var success = false;
try
{
using (proxy)
{
codeBlock((T)proxy);
}
success = true;
}
finally
{
if (!success)
{
proxy.Abort();
}
}
}
private static ChannelFactory<T> …Run Code Online (Sandbox Code Playgroud)