может ли ответ веб-службы ASMX вернуться с ответом.BinaryWrite?


Вместо того, чтобы возвращать двоичный поток (закодированный MTOM/Base64) в самом веб-методе (как SOAP XML), например:

[WebMethod]
public byte[] Download(string FileName)
....
return byteArray;

Может ли этот метод каким-то образом реагировать (возможно, через объект Server)?:

Response.BinaryWrite(byteArray);

Псевдо:

[WebMethod]
public DownloadBinaryWrite(string FileName)
...
Response.BinaryWrite(byteArray);
2 3

2 ответа:

Да, это возможно. Обратите внимание, что я изменяю тип возвращаемого значения на void, так как мы собираемся писать непосредственно в ответ, и мне нужно вручную установить тип содержимого и завершить ответ.

[WebMethod]
public void Download(string FileName)
{
    HttpContext.Current.Response.ContentType="image/png";
    HttpContext.Current.Response.BinaryWrite(imagebytes);
    HttpContext.Current.Response.End();
}
Обратите внимание, что WebMethod на самом деле не поддерживается в эти дни, вы должны переключиться на Web API или WCF (Если вам нужна поддержка SOAP).

Если вы хотите сделать BinaryWrite, вы, вероятно, захотите написать отдельный IHttpHandler вместо веб-метода. Веб-методы ориентированы на мыло, поэтому взламывать их в пользовательских ответах, хотя это и возможно, довольно странно.