![](/img/trans.png)
[英]No connection could be made because the target machine actively refused it 127.0.0.1:8082
[英]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。
你有多種方法可以解決這個問題。
UI和WebApi都是與單獨項目相同的解決方案的一部分。 您知道可以將一個項目設置為默認項目,因此在運行解決方案時,會自動運行一個項目。 您可以右鍵單擊解決方案,轉到屬性,然后選擇公共屬性,然后選擇然后選擇多個啟動項目並選擇所需的項目,甚至超過2.然后兩者都將運行並在運行解決方案時可用。
UI和WebAPi有兩種不同的解決方案。 您所要做的就是首先啟動APi,然后啟動UI,它們將在各自的端口上運行,並能夠相互通信。
無論選擇哪種解決方案,您都可以獨立運行和調試每一層。
此外,你可以讓你的生活更輕松,並配置每個項目在正確的IIS而不是IIS快速運行,然后你不會得到那些瘋狂的端口號,它基本上簡化了你的生活,而且它使它更容易,因為在某些時候你需要在適當的IIS中部署這些東西,你只需復制你在開發中已有的東西
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.