相关疑难解决方法(0)

从客户端的不同文件加载WCF配置

许多人面临的WCF中的一个常见问题是不可能从不同的配置文件加载客户端配置.

当开发人员想要部署一些二进制文件以及独立配置文件(也可能位于资源文件或其他配置文件中)时,这是常见的情况,以避免修改主配置文件.

我找到了两个参考文献:

http://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on-the-client-side.aspx

http://social.msdn.microsoft.com/forums/en-US/wcf/thread/f33e620a-e332-4fd4-ae21-88c750437355/

哪个是关于它的最佳解决方案?

有关最佳解决方案的任何建议吗?我使用VS 2008和.NET 3.5.

c# wcf load configuration-files wcf-client

5
推荐指数
1
解决办法
2185
查看次数

如何为Wcf合同替代使用接口

假设我有3个程序集,Example.Core,Example.Contracts,Example.WcfServices.在我的契约程序集中,我定义了一个接口并添加了一些操作,例如ICalculator,它具有Add(double a,double b)操作.在我的WcfServices程序集中,我将ICalculator实现为Wcf服务.

现在我的问题是这个......在我的Example.Core程序集中,如何在保持所有内容解耦的同时对该接口进行编程(以允许我有一个替代的接口实现).如果我有一个需要ICalculator的类,我可以创建一个来自ChannelFactory并使用它,或者我可以在构造函数中注入一个实例.如果我在课堂上创建一个,那么我在ChannelFactory/Wcf中将依赖项放在我的班级中,我真的不想这样做.如果我在构造函数中注入一个实例,那么注入类将如何管理和整理wcf服务?似乎虽然我有一个界面,但我没有干净的使用方法.我已经看过像NInject这样的东西了,但我不相信如果它出现故障会清理ChannelFactory(至少我没有发现任何文档显示它知道何时调用Abort而不是在通道上关闭).

我最终做的是再次实现我的界面并使用此问题中描述的方法:创建WCF ChannelFactory <T>并只调用服务上的方法.这对我来说有点"闻起来",因为我再次包裹所有的电话只是为了确保通道正确关闭/中止.

有没有任何模式/方法干净地有两个接口的实现,其中一个是Wcf服务?

谢谢,

麦克风.

wcf ninject inversion-of-control

2
推荐指数
1
解决办法
599
查看次数

WCF通道工厂缓存

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)

c# wcf

1
推荐指数
1
解决办法
3055
查看次数