我在当前项目中遇到了一个奇怪的行为。我正在尝试使用WCF来促进用户帐户的密码重置。 ASP.NET和IIS 10.0托管的PasswordService.svc的代码如下所示:
[ServiceContract]
public interface IPasswordService
{
[OperationContract(Name = "RequestReset")]
RequestPasswordResetResponse RequestReset(RequestPasswordResetRequest request);
[OperationContract(Name = "Reset")]
ResetPasswordResponse Reset(ResetPasswordRequest request);
}
public class PasswordService : IPasswordService
{
/// <summary>
/// Flag a Password as reset
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public RequestPasswordResetResponse RequestReset(RequestPasswordResetRequest request)
{
RequestPasswordResetResponse response = new RequestPasswordResetResponse()
{
ResetToken = PasswordInteraction.RequestReset(request.Id)
};
return response;
}
/// <summary>
/// Resets a Password in the Password table
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ResetPasswordResponse Reset(ResetPasswordRequest request)
{
ResetPasswordResponse response = new ResetPasswordResponse()
{
Success = PasswordInteraction.ResetPassword(request.ResetToken, request.EncryptedPassword)
};
return response;
}
}
此应用程序中包含许多服务,我对每个服务都遵循相同的过程。我将服务添加到服务库,使用visual studio上下文菜单将服务引用添加到将使用该服务的应用程序,然后在部署到服务器上的IIS之前在本地测试该服务。
对于所有其他11项服务,这没有引起任何问题。有了这个,它只在本地工作。部署后,调用服务方法会导致:
An unhandled exception of type
'System.ServiceModel.EndpointNotFoundException' occurred in mscorlib.dll
Additional information: There was no endpoint listening at
http://url/Licensing/Services/PasswordService.svc that
could accept the message. This is often caused by an incorrect address or
SOAP action. See InnerException, if present, for more details.
内部异常消息:
The remote server returned an error: (404) Not Found.
经过3天的攻击,更改配置文件,检查服务器角色等等,我尝试了一些似乎不应该工作的东西:我将服务重命名为PwdService(以及所有相关的配置引用) )。这很有效。相同的代码,相同的配置文件,不同的服务名称使其工作。编辑:之后,我将其重命名为PasswordService,并再次停止工作。它现在部署为PwdService。
密码名称是否以某种方式被阻止?我在任何地方都没有发现任何文件表明服务的名称无论如何都受到限制。