Я работаю с Flex, Webservices и C # и хотел бы защитить доступ к своим веб-службам через SOAP.
Я потратил 2 дня на эту проблему:
Мой файл asmx, где я описываю свой веб-метод:
public ServiceAuthHeader CustomSoapHeader = new ServiceAuthHeader();
[SoapHeader("CustomSoapHeader")]
[WebMethod(Description = "Return Somme")]
public int getTotal(int x, int y)
{
ServiceAuthHeaderValidation.Validate(CustomSoapHeader);
var total = x+y;
return total;
}
public class ServiceAuthHeader : SoapHeader
{
// SoapHeader for authentication
public string Username;
public string Password;
}
Тогда я написал класс, чтобы проверить,
содержимое заголовка SOAP
хорошо.
public class ServiceAuthHeaderValidation
{
[SoapHeader("soapHeader")]
[WebMethod(Description = "Check Header")]
public ServiceAuthHeader Validate(ServiceAuthHeader soapHeader)
{
if (soapHeader == null)
{
throw new NullReferenceException("No soap header was specified.");
}
if (soapHeader.Username ==null)
{
Console.WriteLine(soapHeader.Username);
throw new NullReferenceException("Username was not supplied for authentication in SoapHeader!");
}
if (soapHeader.Password == null)
{
throw new NullReferenceException("Password was not supplied for authentication in SoapHeader.");
}
if (soapHeader.Username != "JOE") || soapHeader.Password != "JOE")
{
throw new Exception("Please pass the proper username and password for this service.");
}
return true;
}
}
Пока я думаю, что я прав.
Но пока я хочу реализовать это во Flex:
var q1:QName=new QName("http://localhost:59399/Service1.asmx?wsdl", "Header1");
header1=new SOAPHeader(q1, {String:"JOE",String JOE});
_serviceControl.addHeader(header1);
Я получаю исключение NullReferenceException для моего имени пользователя, которое, похоже, не указано.
Мой веб-сервис работает, кроме случаев, когда я пытаюсь реализовать:
ServiceAuthHeaderValidation.Validate(CustomSoapHeader);
Может ли кто-нибудь ответить мне, чтобы узнать, чего не хватает? или моя ошибка ..
Спасибо за ваше время.
Пока StackoverFlow мне очень помог, читая разные ответы, но сегодня я застрял на этом. Если кто-то может помочь.