从WCF服务中删除.svc导致找不到终结点

本文关键字:找不到 结点 svc WCF 服务 删除 | 更新日期: 2023-09-27 18:29:37

所以今天我决定从WCF服务中删除.svc文件,并开始在线查找。

以下是我所做的一步一步的过程:

步骤1:我添加了global.asax

void Application_Start(object sender, EventArgs e) 
{
    RouteTable.Routes.Add(new ServiceRoute("Authorization", new WebServiceHostFactory(), typeof(Authenticator)));
    RouteTable.Routes.Add(new ServiceRoute("Miscellaneous", new WebServiceHostFactory(), typeof(Misc)));
}

注意:Authenticator和Misc是我的接口实现

步骤2:我启用了asp.net兼容性

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

步骤3:我将[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]添加到每个接口实现中。

步骤4:我必须将[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest)]添加到接口中的每个方法中。我不知道这是怎么回事,但如果没有它,它就会出错。

现在它"工作"了,但当我导航到root/Authorization(授权是我的第一个服务的名称)时,它会"告诉"我找不到端点。

我的端点在我的web.config中指定为:

        <service name="AuthenticatorService.Authenticator">
            <endpoint address="auth" binding="basicHttpBinding" name="AuthEndpoint"
              contract="AuthInterface.IAuthenticator" />
            <endpoint address="mex" binding="mexHttpBinding" name="MetadataEndpoint"
              contract="IMetadataExchange" />
        </service>

我是WCF的新手,所以这可能是一个愚蠢的错误。

从WCF服务中删除.svc导致找不到终结点

您在这里混合了两种技术-在您的配置中,您定义了basicHttpBinding,这是一个SOAP服务-然而,在您的服务路由中,您传递了一个WebServiceHost,它用于WCF中的REST服务(基于webHttpBinding)。

试试这个-只需在global.asax文件中使用"常规"(面向SOAP)ServiceHostFactory

void Application_Start(object sender, EventArgs e) 
{
    RouteTable.Routes.Add(
       new ServiceRoute("Authorization", 
                        new ServiceHostFactory(), typeof(Authenticator)));
    RouteTable.Routes.Add(
       new ServiceRoute("Miscellaneous", 
                        new ServiceHostFactory(), typeof(Misc)));
}