вызов веб-сервиса с использованием httprequest - PullRequest
1 голос
/ 12 февраля 2009

У меня есть веб-сервис, который содержит метод, подобный следующему

 [WebMethod]
 public string UploadFile(byte[] bytes, string file_name)
  {

  }

Я хочу вызвать этот метод веб-службы, используя HttpWebRequest, чтобы я мог передавать файл без буферизации в памяти. Как это сделать ... я попытался вызвать его следующим образом

HttpWebRequest hw = HttpWebRequest.Create("http://localhost/xxx/xxx.asmx/Upload") as HttpWebRequest;
hw.ContentType = "application/x-www-form-urlencoded";
hw.AllowWriteStreamBuffering = false;
hw.Method = "POST";
hw.UnsafeAuthenticatedConnectionSharing = true;
hw.UserAgent = "test type";
hw.Credentials = CredentialCache.DefaultCredentials;
FileInfo fi = new FileInfo("C:/Documents and Settings/Administrator/Desktop/a.txt");
string bytes = "bytes=";
byte[] by = UTF8Encoding.UTF8.GetBytes(bytes);
byte[] fn = UTF8Encoding.UTF8.GetBytes("&file_name=a.txt");
hw.ContentLength = by.Length+fi.Length+fn.Length;

using (Stream postStream = hw.GetRequestStream())
 {
        FileStream br = new FileStream("C:/Documents and Settings/Administrator/Desktop/a.txt", FileMode.Open, FileAccess.Read);

        postStream.Write(by, 0, by.Length);

        byte[] buffer = new byte[1024];
        int bytesRead = 0;
        while (true)
        {
            bytesRead = br.Read(buffer, 0, buffer.Length);
            if (bytesRead == 0)
                break;
            postStream.Write(buffer, 0, bytesRead);
        }
        br.Close();

        postStream.Write(fn, 0, fn.Length);
        postStream.Write(ct, 0, ct.Length);
    }
    // HERE : 
    using (HttpWebResponse response = hw.GetResponse() as HttpWebResponse)
    {

        StreamReader reader = new StreamReader(response.GetResponseStream());

         string sssdd = reader.ReadToEnd();

    }

но отображается сообщение «Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера». при выполнении ** // ЗДЕСЬ: ** отмеченная строка.

Кстати: я использую asp.net 2.0, и мне не разрешено использовать прокси-класс, так как мое требование - потоковая передача данных для большого файла Заранее спасибо

Ответы [ 4 ]

1 голос
/ 11 августа 2009

Прошло много времени с тех пор, как я запутался в этом, но я думаю, что вы можете получить базовый HttpRequest в прокси-классе. Вероятно, намного проще, чем создать собственный SOAP для POST.

1 голос
/ 12 февраля 2009

Откройте http://localhost/xxx/xxx.asmx/Upload в вашем браузере, и ASP.NET предоставит вам пример запроса POST, который вам нужно отправить для вызова метода. Начните с этого момента.

0 голосов
/ 20 сентября 2012

Удалите эти строки:

postStream.Write(by, 0, by.Length);
.
.
.
postStream.Write(fn, 0, fn.Length);
postStream.Write(ct, 0, ct.Length);
0 голосов
/ 14 февраля 2009

Если он говорит, что удаленный сервер возвратил ошибку, то вы должны посмотреть на удаленном сервере, чтобы увидеть, что это за ошибка. В журнале событий на сервере найдите события примерно в то время, когда вы получили ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...