Всем привет!
Собственно вопрос в следующем: есть функция на JavaScript, из которой надо вызвать метод сервиса, написанного на ASP.NET.
Скрипт запускается Web-приложением ASP.NET с обычной Windows-аутентификацией, сервис - с интегрированной(встроенной)-Windows аутентификацией.
Для вызова функции на страницу загружается объект WebService.htc.
Проблема в том, что пользователь, прошедший обычную Windows-аутентификацию(User.Identity.Name), и правильно распознанный приложением, на сервис не передается. Точнее, передается пользователь, от имени которого запущен IE.
А если к приложению обращаются с другой машины, то и вовсе приходит аноним.
Ниже привожу коды основных компонентов.
Страница WebForm1.aspx
<script language="javascript" id="EventHandlerJS">
function GetDataFromService( obj_id )
{
var proxy = this.document.getElementById("proxy");
var arg = obj_id;
if (proxy != null)
{
//вызов сервиса через WebService.htc
proxy.useService("http://"+location.hostname+"/AspService/AspService.asmx?wsdl", "AspService");
proxy.AspService.callService(resultHandler, "GetDataSet", arg);
}
}
function resultHandler(result)
{
alert(result.value);
FormResult.select.value = result.value;
var win = window.open("/app/Default.aspx", "myclientname");
FormResult.submit();
win.focus();
}
</script>
...
<div id="proxy" style="BEHAVIOR: url(webservice.htc)"></div>
<FORM name="FormResult" action="/app/Default.aspx" method="post" target="mapclient">
<input id="select" style="WIDTH: 0px; HEIGHT: 0px" type="text" name="select" runat="server">
</FORM>
<table><tr><td>
<xsl:element name = "a">
<xsl:attribute name="href">JavaScript:GetDataFromService("123")</xsl:attribute>
<xsl:text>Переслать данные</xsl:text>
</xsl:element>
</td></tr></table>
Вызываемая на сервисе функция (AspService.asmx.cs)
[WebMethod]
public DataSet GetDataSet(String arg )
{
DataSet ds = new DataSet();
//список пользователей, имеющих право получения данных
//для примера - только админ
string allowed_usr = "Admin";
//ВОТ ТУТ недошедший пользователь asp.net приложения
if( User.Identity.Name == allowed_usr )
//получить данные
ds = FillData( arg );
return ds;
}
Может кто то сталкивался с подобной проблемой и сумел ее решить?
Буду очень благодарен за вашу помощь!
|