2

我正在尝试在没有 svc 文件的情况下在我的 wcf Web 服务中使用 unity.wcf。

我的代码:

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
//[BasicAuthentication] TODO: this need to be set up
public class SsoAuthenticationService : ISsoAuthenticationService
{
    private readonly ICustomerManager _manager;
    internal const string ServiceUri = "SsoAuthenticationService";

    public SsoAuthenticationService(ICustomerManager manager)
    {
        _manager = manager;
    }

    [WebGet(UriTemplate = "CreateSsoLogin/{request}")]
    public ServiceResponse<bool> CreateSsoLogin(string request)
    {
        // TODO: inputs and outputs are wrong
        _manager.DoWork();
        return new ServiceResponse<bool>();
    }
}

    public class ServiceFactory : UnityServiceHostFactory
{
    protected override void ConfigureContainer(Microsoft.Practices.Unity.IUnityContainer container)
    {
        container.RegisterType<ISsoAuthenticationService, SsoAuthenticationService>("authentication")
            .RegisterType<ICustomerManager, CustomerManager>();


    }
}

现在,当我尝试连接 ServiceFactory 类时,问题就出现了——在我看到的所有代码示例中,它们都是通过 svc 文件执行此操作的,但我的应用程序中没有,因为它使用的是 ASP.NET 路由。

所以我的 Global.asax 看起来像:

 private static void RegisterRoutes(RouteCollection routes)
    {

        //Integrate WCF services with the ASP.NET routing feature
        routes.Add(new ServiceRoute(SsoAuthenticationService.ServiceUri, new ServiceFactory(), typeof(SsoAuthenticationService)));
    }

当我调用我的 Web 服务方法时,我没有点击 Web 方法代码(尽管它确实调用了 ServiceFactory.ConfigureContainer)。如果我不使用 Unity,Global.asax 将如下所示:

 private static void RegisterRoutes(RouteCollection routes)
    {

        //Integrate WCF services with the ASP.NET routing feature
        routes.Add(new ServiceRoute(SsoAuthenticationService.ServiceUri, new WebServiceHostFactory(), typeof(SsoAuthenticationService)));
    }

如果我把它改成这个,那么 web 方法就会被命中,但它当然会抱怨构造函数。

我需要什么额外的配置才能使 ServiceFactory 类表现得像 WebServiceHostFactory?

或者更好的选择是不使用 Unity.Wcf,并尝试使用普通的 Unity 来实现?

4

1 回答 1

3

好的,我已经设法使用以下链接http://www.agile-code.com/blog/rest-web-services-with-unity-wcf/找到了答案

如链接中所述,我必须创建一对新的类以从 WebServiceHostFactory (抽象)和 WebServiceHost 继承。

一旦这些到位,并且我的 ServiceFactory 类从新类继承,一切都开始工作了。

于 2013-10-19T22:17:48.280 回答