我无法让我的客户重新确认 Visual Studio 添加到代理类中的 AuthHeaderValue 我看过很多例子,但找不到任何关于如何解决这个问题的信息。
香皂类
public class AuthHeader : SoapHeader
{
public string Username;
public string Password;
}
网络服务
public class Service1 : System.Web.Services.WebService
{
public AuthHeader Authentication; ** where does visual studio append value to proxy
[SoapHeader("Authentication", Required = true)]
[WebMethod]
public string security()
{
if (Authentication.Username == "test" &&
Authentication.Password == "test")
{
return "authenticated";
}
else
{
return "get lost";
}
}
客户
static void Main(string[] args)
{
ServiceReference1.AuthHeader auth = new ServiceReference1.AuthHeader();
auth.Username = "test";
auth.Password = "test";
ServiceReference1.Service1SoapClient ser = new ServiceReference1.Service1SoapClient();
ser.AuthHeaderValue = auth; ** does not reconise authheadervalue
String message = ser.security();
Console.WriteLine(message);
}
WebService service = new WebService();
service.Authentication.Username = "a";
service.Authentication.Password = "a";
string str = service .CheckAuthn();
应用该代码
试试这个
public ServiceAuthHeader Credentials;
public class ServiceAuthHeader : SoapHeader
{
public string Username;
public string Password;
}
安全方法更改如下
public static string Validate(ServiceAuthHeader soapHeader)
{
string error_msg = "Pass";
if (soapHeader == null)
{
error_msg = "No soap header was specified.";
}
else if (soapHeader.Username == null || soapHeader.Username == "")
{
error_msg = "Username was not supplied for authentication in SoapHeader.";
}
else if (soapHeader.Password == null || soapHeader.Password == "")
{
error_msg = "Password was not supplied for authentication in SoapHeader.";
}
else if (soapHeader.Username != "test" || soapHeader.Password != "test")
{
error_msg = "Please pass the proper username and password for this service.";
}
return error_msg;
}
在某个公共类或其他地方保留带有您的凭据的方法
public static void AuthValidatoin(WebserviceObject callwebservice)
{
ServiceAuthHeader serviceAuthHeaderValue = new LocalERPWebService.ServiceAuthHeader();
serviceAuthHeaderValue.Username = "test";
serviceAuthHeaderValue.Password = "test";
callwebservice.ServiceAuthHeaderValue = serviceAuthHeaderValue;
}
当您调用网络服务时,使用上述方法来验证服务,如下所示
WebserviceObject CallWebService = new WebserviceObject();
common.AuthValidatoin(CallWebService);