使用控制台托管时,Net Tcp Service无法被发现

时间:2011-11-10 18:12:14

标签: wcf hosting

当尝试通过Windows控制台使用Net Tcp频道托管我的WCF服务时,每次我想让我的服务都被发现时,我必须评论4行代码。

class Program
{
    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(MyLibrary.MyService)))
        {
            // The following four lines of code currently break the ability to update or recreate a reference to this service
            // Configure the custom authorization policy which will invoke the custom role-permission model

            **//List<IAuthorizationPolicy> policies = new List<IAuthorizationPolicy>();
            //policies.Add(new CustomAuthorizationPolicy());
            //host.Authorization.ExternalAuthorizationPolicies = policies.AsReadOnly();
            //host.Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom;**

            // Instantiate the service listener
            host.Open();
            Console.WriteLine("The service is running and is listening on:" + Environment.NewLine);

            // Iterate through all the configured service end points
            foreach (ServiceEndpoint endPoint in host.Description.Endpoints)
            { // Do My Work
            }
            Console.WriteLine(Environment.NewLine + "Press any key to stop the service");
            Console.ReadKey();

            host.Close();
        }
    }
}

我可以评论这4行代码并使服务可被发现,添加和更新服务引用等,然后在完成后还原代码。

在制作方面,我通过Windows服务托管服务,所以实际上没有显示停止。

我试图找出为什么我每次都要评论这4行代码并且有办法解决这个问题,尽管我有办法绕过这个问题。任何提示都将是一个很大的帮助和赞赏。

1 个答案:

答案 0 :(得分:0)

如果没有具体了解CustomAuthorizationPolicy的内容,将很难准确说出,但我最好的猜测是您的策略拒绝调用MEX端点,因为它们不符合您的授权要求。如果你说你正在检查角色,这很可能是因为默认情况下没有设置MEX端点来支持Windows身份验证,所以你会收到一个匿名呼叫,因此最终的IsInRole检查会失败。