Я пытаюсь использовать заголовки SOAP для обеспечения аутентификации SQL при доступе к веб-сервису, опубликованному на моем поле SQL 2005 через Конечную точку HTTP. На конечной точке я установил Аутентификацию = (Основной), Порты = (SSL) и LOGIN_TYPE = СМЕШАННЫЙ. Я могу генерировать WSDL и использовать его очень хорошо в учетных данных домена использования VS. Однако, когда я пытаюсь реализовать заголовки SOAP для обеспечения аутентификации SQL, я сталкиваюсь с проблемами. Я следовал за MS BOL к букве (http://msdn.microsoft.com/en-us/library/ms189619 (SQL.90) .aspx), но по некоторым причинам, я не отправляю заголовок SOAP. Я проверил это при помощи скрипача (http://www.fiddler2.com/fiddler2/), чтобы захватить мои сообщения https и посмотреть на них. Любая справка значительно ценилась бы. Включенный код, который я использовал (имена изменились для защиты невинного),
namespace ConsoleApplication.WebService
{
class Program
{
static void Main(string[] args)
{
//Prevents error due to self signed cert
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Stuff stuff = new Stuff();
stuff.DoSomthing();
}
}
public class Stuff
{
[System.Web.Services.Protocols.SoapHeaderAttribute("sqlSecurity")]
public int DoSomthing()
{
Webservice ws = new Webservice();
CredentialCache myCreds = new CredentialCache();
myCreds.Add(new Uri(ws.Url), "Basic", new NetworkCredential("netaccount", "netpass", "domain"));
ws.Credentials = myCreds;
ws.sqlSecurity = new SqlSoapHeader.Security();
ws.sqlSecurity.Username = "sqluser";
ws.sqlSecurity.Password = "sqlpass";
try
{
ws.SelectUserAccountByUserName("someuser");
}
catch (SoapException ex)
{
string txterror = ex.Detail.InnerText;
return 0;
}
return 1;
}
}
public partial class Webservice
{
public SqlSoapHeader.Security sqlSecurity;
}
}
Этот код использует класс SqlSoapHeader, как зарегистрировано в ссылку BOL сверху.
Я ошибка при вызове ws. SelectUserAccountByUserName () с "Выполняют разрешение, отклоненное" вследствие того, что "netaccount" пользователь не имеет прав выполнить сохраненный proc. Но снова, это вызвано тем, что согласно сообщению мыла, никакой заголовок с sqluser информацией не передается.
Атрибут SoapHeaderAttribute
необходимо добавить к веб-методу . Добавлять его к какому-нибудь произвольному вызывающему методу бесполезно.