Как загрузить фотографию из ASP.NET MVC в веб-службу WCF - PullRequest
0 голосов
/ 30 марта 2011

Привет! Я пытаюсь вызвать веб-службу WCF из проекта ASP.NET MVC по умолчанию, чтобы загрузить фотографию на сервер с веб-сайта ASP.NET MVC. Мой веб-сервис WCF выглядит так:

public void SaveImage(string fileName, byte[] photo)
    {
        writeByteArrayToFile(Path.Combine(@"c:\TempImg", fileName), photo);
    }

    public void writeByteArrayToFile(string fileName, byte[] buffer)
    {
        using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
        {
            fs.Write(buffer, 0, (int)buffer.Length);
        }
    }

В HomeController на проекте я написал этот код:

using HackedTwo.ServiceReference1;

namespace HackedTwo.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        private ServiceReference1.IService1 myWS;

        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }

        [HttpPost]
        public ActionResult Index(HttpPostedFileBase file)
        {
            if (file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);

                BinaryReader b = new BinaryReader(file.InputStream);
                byte[] binData = b.ReadBytes(file.ContentLength);              

                myWS.SaveImage(fileName, binData);
            }
            return RedirectToAction("Index");
        }
    }
}

Может быть, я близок к тому, чтобы заставить его работать? Но когда я запускаю его, я получаю «NullReferenceException», в верхней части кода, где я объявляю веб-службу, есть зеленая линия под «myWS», и я получаю это сообщение из Visual Studio «Field» HackedTwo.Controllers.HomeController. .myWS 'никогда не назначается и всегда будет иметь значение по умолчанию null ". Так или иначе, я подозреваю, что это может быть проблемой, почему это не работает. Если это так, то мой вопрос сейчас: Как назначить поле 'HackedTwo.Controllers.HomeController.myWS'? Или я должен ссылаться на веб-сервис каким-либо другим образом в моем проекте ASP.NET MVC?

1 Ответ

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

Вам необходимо инициализировать эту переменную myWS перед ее использованием:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        if (file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            using (var myWs = new ServiceReference1.MyServiceClient())
            using (var reader = new BinaryReader(file.InputStream))
            {
                var binData = reader.ReadBytes(file.ContentLength);              
                myWS.SaveImage(fileName, binData);
            }
        }
        return RedirectToAction("Index");
    }
}

или если вы используете внедрение зависимостей:

[HandleError]
public class HomeController : Controller
{
    private readonly IService1 _myWs;
    public HomeController(IService1 myWs)
    {
        _myWs = myWs;
    }

    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        if (file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            using (var reader = new BinaryReader(file.InputStream))
            {
                var binData = reader.ReadBytes(file.ContentLength);              
                myWS.SaveImage(fileName, binData);
            }
        }
        return RedirectToAction("Index");
    }
}

и затем вам нужно настроить внедрение зависимости, чтобы передать правильную реализацию интерфейса контракта на обслуживание IService1 в конструкторе контроллера.

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