2009-03-26 2 views
0

Это первый раз, когда я использовал веб-сервис для чего-нибудь, поэтому вопрос может быть немного базовым. Во всяком случае, у меня есть веб-сервис, который действует как прокси-сервер для нашего сайта поставщиков. Это упрощает «скрипинг экрана», который мы обычно должны делать. Функция вебсервиса выглядит следующим образом:Объект параметра WebService, который переименован

 
namespace foo 
{ 
    public class MyService : WebService 
    { 
    [WebMethod] 
    public string UploadFile(System.IO.FileStream fileToUpload) 
    { 
     return _obj.Upload(fileToUpload); 
    } 
    } 
}  

клиент выдает ошибку при попытке дать ему FileStream, что метод просит. В компиляции где-то веб-сервис изменил тип параметра из System.IO.FileStream на foo.FileStream. У кого-нибудь есть идеи относительно того, как я сделал это с собой?

Заранее благодарен!

ответ

0

В .NET при совершении вызовов по доменам приложений (как вы здесь) вы не можете передавать данные, относящиеся к этому домену приложения.

Общая версия этого заключается в том, что, когда вы совершаете вызовы между двумя отдельными процессами, вы не можете передавать информацию, которая является конкретной (то есть имеет значение только в этом контексте), в этот процесс и ожидать, что она имеет значение в другой процесс.

Это то, что вы делаете с фильтром. Файловый поток является дескриптором файла в ОС, который является специфическим для процесса. Нет никакой гарантии, что процесс на одном компьютере, не говоря уже о процессе на другой машине, сможет это понять.

Это веб-сервис, это именно то, что у вас есть, так как у вас есть два процесса на разных машинах.

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

Вы должны изменить параметр на массив байтов, а затем обработать байты соответствующим образом в своем методе.

+0

Как ни странно, я просто сбросил FileStream за байт [] прямо перед тем, как проверить свой пост здесь. Я полностью понимаю вашу точку зрения. Еще раз спасибо. –

0

Веб-службы ASMX не поддерживают использование System.IO.Stream или любого производного типа Stream. Для этого вам понадобится WCF.

Смежные вопросы