将OperationContracts动态添加到ServiceContract

时间:2016-01-11 14:45:18

标签: c# wcf

我正在开发一个WCF应用程序,我需要创建“路由”,以便基于某些dll动态执行OperationContracts。

这就是它的样子

[ServiceContract]
public interface ImyWebService
{
    [OperationContract] //Login to web server
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        Method = "POST",
        UriTemplate = @"/login")]
    LoginResponse MyLogin(LoginRequest request);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = int.MaxValue)]
public class WebService : ImyWebService
{
    public LoginResponse MyLogin(LoginRequest request)
    {

    }
}

我们可以看到MyLogin是统计定义的,但我想在运行时添加其他OperationContract。

这可能吗?我发现的所有解决方案都不适合我的使用。

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。

    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        Method = "POST",
        UriTemplate = @"*")]
    GenericResponse Post(GenericRequest request);


    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = @"*")]
    GenericResponse Get();

这是我的朋友们的关键! UriTemplate = @"*" 星号“*”UriTemplate将所有请求重定向到指定的方法。 在此之后我只需要创建一个路由系统。