我正在努力提高C#作业的速度,让我们称它为WidgetProcessor'。在一次运行中,WidgetProcessor将处理大约5,000个小部件并花费大约12个小时来完成(大约8秒/小部件)。
WidgetProcessor对3个不同的Web服务进行引用,并为每个处理的窗口小部件多次调用它们。可以对“WidgetProcessor”进行各种性能/设计改进。程序,但我想测试通过网络进行的多个Web服务调用是否导致作业运行缓慢。
我有三个Web服务中的每一个的源代码(并且可以访问这些Web服务使用的所有资源),并且我想知道是否有方法可以轻松使用Web WidgetProcessor中的服务接口通过引用Web服务项目本身(而不是通过网络调用Web服务)。 Web服务在C#中实现。
我会直接引用服务实现类,但我遇到的主要问题是Web服务总共有大约100个数据契约,面向公众的名称与实现类不同。
[DataContract(Name = "WidgetInfo")]
public class WidgetDataContract
{
// DataMembers
}
因此,直接引用实现意味着我在WidgetProcessor中进行了许多代码更改。相反,我想使用服务接口,以便代码更改可以保持在最低限度。
基本上,我希望我的WidgetProcessor解决方案中的服务外观和行为类似于网络服务,但不会通过网络执行其操作。
这甚至可能吗?
答案 0 :(得分:1)
您可以添加使用datacontract中指定的名称对实现进行子类化的适配器类:
public class WidgetInfo : WidgetDataContract { }
如果您发现服务调用的开销过于昂贵,您可能会看到使用不同绑定或序列化格式的好处。正确调整后,WCF可以接近进程速度。
编辑:如果您打算不修改任何代码,您确实有几个选项,但我认为它们是搜索问题的解决方案:
TypeForwardedToAttribute
,但属性访问存在问题。这可能取决于将svcutil
生成的类放在另一个程序集中。