Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将多个wcf服务转换为单个服务_.net_Wcf_Service_Soa - Fatal编程技术网

.net 将多个wcf服务转换为单个服务

.net 将多个wcf服务转换为单个服务,.net,wcf,service,soa,.net,Wcf,Service,Soa,在开始大量工作之前,我需要指导 我们在单个iis上公开了许多wcf服务(大约500个)。目前,这些服务使用相同的绑定,但有不同且较长的服务合同(我们有大约15000个操作合同!)。我的任务是建立一个适用于所有服务的通用处理管道。这样,我们将有一个钩子来控制这些当前自治的服务。通过这些钩子,我们将有机会控制事务行为、应用超时等 对于这个任务,作为最初的建议,我正在计划一个代码再生过程,将这些现有服务映射到单个服务。现有服务(例如: ) 将简化为一项服务,只需一次操作,如: [ServiceCont

在开始大量工作之前,我需要指导

我们在单个iis上公开了许多wcf服务(大约500个)。目前,这些服务使用相同的绑定,但有不同且较长的服务合同(我们有大约15000个操作合同!)。我的任务是建立一个适用于所有服务的通用处理管道。这样,我们将有一个钩子来控制这些当前自治的服务。通过这些钩子,我们将有机会控制事务行为、应用超时等

对于这个任务,作为最初的建议,我正在计划一个代码再生过程,将这些现有服务映射到单个服务。现有服务(例如:

) 将简化为一项服务,只需一次操作,如:

[ServiceContract]
public interface IExecutionService
{
    [OperationContract]
    ResponseBase Execute(RequestBase req);
}

[KnownType(typeof(XXXRequest))]
[KnownType(typeof(YYYRequest))]
// ... ... ...
public abstract class RequestBase
{
}
[KnownType(typeof(XXXResponse))]
[KnownType(typeof(YYYResponse))]
// ... ... ...
public abstract class ResponseBase
{
}
作为这个单一服务的所有者,我将面对所有的请求,然后继续定期执行

由于每个服务请求独立于另一个服务请求,因此我计划使用反射来传输有关要执行的实际操作合同的信息。更具体地说,我计划将实际wcf服务的MethodInfo和ParameterInfo放入请求对象中。在我的服务中,我将使用这些反射数据调用实际的服务。实际操作合同的返回类型,如果不为空,则放入ExecutionResult


您是否发现这种方法存在缺陷。正如我所说,这是我对这个问题的初步建议。以前有人做过这种工作吗?任何帮助/想法都将不胜感激。

Well@Balder已经一年多了,这个问题仍然没有得到回答:)你也可以编辑链接的问题来改进它-这将使问题回到问题队列的顶部…好了@Balder…相关:
[ServiceContract]
public interface IExecutionService
{
    [OperationContract]
    ResponseBase Execute(RequestBase req);
}

[KnownType(typeof(XXXRequest))]
[KnownType(typeof(YYYRequest))]
// ... ... ...
public abstract class RequestBase
{
}
[KnownType(typeof(XXXResponse))]
[KnownType(typeof(YYYResponse))]
// ... ... ...
public abstract class ResponseBase
{
}