从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的新手,所以这可能是一个愚蠢的错误。
您在这里混合了两种技术-在您的配置中,您定义了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)));
}