Сбой TcpClient при использовании метода веб-службы - PullRequest
2 голосов
/ 15 февраля 2011

У меня следующая проблема - я пытался использовать внешнюю сборку в своем методе веб-сервиса (веб-сервис работает в локальной сети).Эта внешняя сборка в своих внутренних устройствах использует 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-сервера, кажется, что из методов веб-сервиса даже не попадает в прокси-сервер. Может быть, кто-то сталкивался с такой же проблемой. Заранее спасибо и извините за мой неправильный английский!

1 Ответ

0 голосов
/ 19 марта 2011

Удалить косую черту с прокси-адреса, как показано ниже

<proxy proxyaddress="http://isa-server:8080" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...