我正在尝试在 MVC 中使用 3 层架构
MVC UI-->服务-->实体

我正在使用内置的 asp.net web 开发服务器,其中我配置了端口 4515 来运行 UI 层,并且我正在执行 ajax 调用以命中服务层中配置在端口 35420.and 时的 webapi 服务。 ajax 调用我收到如下错误,状态为 500



当我查看 IIS express 时,只有 4515 正在运行,而 35420 服务层没有运行。

如何摆脱这个问题?我希望我的服务层在我的 UI 层运行时自动并行运行?有什么办法可以为此完成更好的解决方案吗?

而且我无法使用 Visual Studio 2013 的内置 IIS Express 内置开发服务器为上述两个项目配置相同的端口号?

是否可以在 Visual Studio 2013 的内置开发服务器的 IIS Express 中为上述两个项目配置相同的端口号?

js函数:

function AddProduct() {

    var productmodel = {
        ProductName: $('#ProductName').val(),
        CreationDate: $('#CreationDate').val(),
        ProuductSerialNumber: $('#ProuductSerialNumber').val(),
        Descripiton: $('#Descripiton').val(),
        CreatedBy: $('#CreatedBy').val(),
        Price: $('#Price').val()
    };
    var form = $("#productFrm");
    if (form.valid()) {
        $.ajax({
            url: 'Product/AddProduct',
            type: 'POST',
            data: JSON.stringify(productmodel),
            contentType: "application/json;charset=utf-8",
            beforeSend : function(xhr, opts){
                //show loading gif
                $(".overlay").show();
                $(".loading-img").show();
            },
            success: function (data) {
                if (data.StatusCode === 204) {
                    alert('Product Created Succesfully');
                }

                else
                {
                    alert('Something is wrong and server returned :' + data.StatusCode + ' and the reason is  ' + data.ReasonPhrase);
                }
            },
            error: function (x, y, z) {
                alert(x + '\n' + y + '\n' + z);
            },
            complete : function() {
                //remove loading gif
                $(".overlay").hide();
                $(".loading-img").hide();
            }
        });
    }
}


GloboMart.Application.Web.UI project Configured in IIS Port  4515:

public class ProductController : Controller
    {

        private HttpClient _client;
        private HttpResponseMessage _response;
        public ProductController()
        {
            _client = new HttpClient();
            _client.BaseAddress = new Uri("http://localhost:32450/");
        }
        // GET: Product
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public async Task<JsonResult> AddProduct(ProductViewModel ProductViewModel)
        {
            using (var client = _client)
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                StringContent content = new StringContent(JsonConvert.SerializeObject(ProductViewModel), Encoding.UTF8, "application/json");
                _response = await client.PostAsync("api/Products/CreateProduct", content);
            }
            return Json(_response);
        }

GloboMart.Services.WebApi project Confiugured in port http://localhost:32450/


using GloboMart.Domain.Entities.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using GloboMart.Application.Web.UI.Models;
using GloboMart.Domain.Entities.Entities;

namespace GloboMart.Services.WebApi.Controllers
{
    public class ProductsController : ApiController
    {
        private IProductRepository _repository;

        public ProductsController(IProductRepository Repository)
        {
            _repository = Repository;
        }

        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet]
        public List<Product> GetAllProducts()
        {
            var products= _repository.GetAll();

            return products.ToList();

        }

        // POST api/values

        [HttpPost]
        public void CreateProduct([FromBody] ProductViewModel ProductViewModel)
        {
            var Product=ConvertProductModelToProduct(ProductViewModel);
            _repository.Add(Product);
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }

        private Product ConvertProductModelToProduct(ProductViewModel ProductViewModel)
        {
          `enter code here`  var Product = new Product()
                                        {
                                           Name=ProductViewModel.ProductName,
                                           SerialNumber=ProductViewModel.ProuductSerialNumber,
                                           Description=ProductViewModel.Descripiton,
                                           CreatedBy=ProductViewModel.CreatedBy,
                                           CreationDate=Convert.ToDateTime(ProductViewModel.CreationDate),
                                           Price=ProductViewModel.Price
                                        };
            return Product;
        }
    }
}

最佳答案

3 层架构并不意味着您必须拥有 3 个单独托管的层。

您可以将所有层放在 Visual Studio 中的一个解决方案中。这样,当您运行您的网站时,您可以将其作为一个托管解决方案一次性运行。通常,这是通过一个 Web/MVC 项目、一个应用程序逻辑项目和一个 Dataaccess 项目(您称之为实体)来完成的。您应该能够在 Application Logic 项目的 Web/MVC 项目中拉入引用。然后,您可以将 Dataaccess 的引用引入到应用程序逻辑中(反之亦然)。

关于c# - 无法建立连接,因为目标机器主动拒绝它 127.0.0.1 :32450,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41788217/

10-14 22:48
查看更多