У меня следующая проблема - я пытался использовать внешнюю сборку в своем методе веб-сервиса (веб-сервис работает в локальной сети).Эта внешняя сборка в своих внутренних устройствах использует TcpClient для доступа к внешнему IP-адресу.Но к сожалению.Создание TcpClient завершается неудачно.
System.Net.Sockets.SocketException был обнаружен Сообщение = Операция сокета обнаружила мертвую сеть xxx.xxx.xxx.xxx:xxxx Source = System ErrorCode = 10050 NativeErrorCode = 10050 StackTrace: в системе.Net.Sockets.TcpClient..ctor (Строковое имя хоста, порт Int32)
Доступ к внешней сети из локальной сети осуществляется через прокси-сервер Microsoft ISA Server.Из консольного приложения все работает нормально, но из метода веб-сервиса возникает исключение :( Я попытался использовать следующие параметры в файле web.config:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true" >
</compilation>
<authentication mode="Windows"/>
<identity impersonate="true" userName="domain\User" password="password"/>
</system.web>
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://isa-server:8080/" bypassonlocal="True" usesystemdefault="True" />
</defaultProxy>
</system.net>
</configuration>
Но и к сожалению. Это странно, потому что запрос из класса WebRequest выполненв обычном порядке. Проблема именно в классе TcpClient.
[WebMethod]
public string Test()
{
// This code works fine
var request = WebRequest.Create("http://www.google.ru");
var response = (HttpWebResponse)request.GetResponse();
Debug.Assert(response.StatusDescription.ToUpper() == "OK");
// But this rise exception
var a = new TcpClient("XXX.XXX.XXX.XXX", XXX).GetStream().CanRead;
}
Я также пробовал ручную имперсонализацию в методе веб-службы, но также не дал результата
new WindowsIdentity(WindowsIdentity.GetCurrent(true).Token).Impersonate();
Может кто-нибудь мне помочь? Может быть,проблема в неверных параметрах прокси-сервера ISA? Я смотрел логи ISA-сервера, кажется, что из методов веб-сервиса даже не попадает в прокси-сервер. Может быть, кто-то сталкивался с такой же проблемой. Заранее спасибо и извините за мой неправильный английский!