簡體   English   中英

無法建立連接,因為目標計算機主動拒絕它127.0.0.1:32450

[英]No connection could be made because the target machine actively refused it 127.0.0.1:32450

我試圖在MVC MVC UI中使用3層架構 - >服務 - >實體

我正在使用內置的asp.net web開發服務器,我在其中配置了端口4515來運行UI層,我正在進行ajax調用,以便在端口35420配置的服務層中點擊webapi服務。當我制作時ajax調用我收到如下狀態500的錯誤

System.Net.Sockets.SocketException:無法建立連接,因為目標計算機主動拒絕它127.0.0.1:32450。

當我查看IIS Express時,只有4515正在運行且35420服務層未運行。

如何擺脫這個問題? 當我的UI層運行時,我希望我的服務層自動並行運行? 有什么辦法可以為此做出更好的解決方案嗎?

使用Visual Studio 2013內置的IIS Express內置開發服務器,我無法為上述兩個項目配置相同的端口號?

是否有可能在IIS Express內置的開發服務器中為visual studio 2013配置相同的端口號以進行上述兩個項目?

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項目,一個Application Logic項目和一個Dataaccess項目(您稱之為實體)來完成的。 您應該能夠在Application Logic項目的Web / MVC項目中引入一個引用。 然后,您可以將Dataaccess的引用引入應用程序邏輯(反之亦然)。

擁有這樣工作的應用程序是完全正常的:端口上的UI和不同端口上的webapi。

你有多種方法可以解決這個問題。

  1. UI和WebApi都是與單獨項目相同的解決方案的一部分。 您知道可以將一個項目設置為默認項目,因此在運行解決方案時,會自動運行一個項目。 您可以右鍵單擊解決方案,轉到屬性,然后選擇公共屬性,然后選擇然后選擇多個啟動項目並選擇所需的項目,甚至超過2.然后兩者都將運行並在運行解決方案時可用。

  2. UI和WebAPi有兩種不同的解決方案。 您所要做的就是首先啟動APi,然后啟動UI,它們將在各自的端口上運行,並能夠相互通信。

無論選擇哪種解決方案,您都可以獨立運行和調試每一層。

此外,你可以讓你的生活更輕松,並配置每個項目在正確的IIS而不是IIS快速運行,然后你不會得到那些瘋狂的端口號,它基本上簡化了你的生活,而且它使它更容易,因為在某些時候你需要在適當的IIS中部署這些東西,你只需復制你在開發中已有的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM