2017-01-22 28 views
4

我想使用3層架構MVC MVC UI - >服務 - >實體無連接可以作出,因爲目標機器積極地拒絕它127.0.0.1:32450

我使用內置的asp.net web開發服務器,在這裏我配置了4515端口來運行UI層,並且我正在ajax調用,以在端口35420配置的服務層中打一個webapi服務。當我做一個ajax調用時,我是得到如下狀態500的錯誤

System.Net.Sockets.SocketException:由於目標機器主動拒絕它而無法建立連接127.0.0.1:32 450。

當我查看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; 
     } 
    } 
} 
+1

你有多個項目,所有的都在調試時開始:http://stackoverflow.com/questions/3697092/starting-多項目時調試在視覺工作室2010? – rene

+0

我假設端口號(35420和32450)中的不一致是錯別字,而不是您嘗試連接到錯誤端口的事實? – Chris

回答

0

3層結構,並不意味着你必須有3分別主持層。

您可以將所有圖層放在Visual Studio中的一個解決方案中。這樣,當您運行您的網站時,您可以將它作爲一個託管解決方案一次全部運行。通常,這是通過一個Web/MVC項目,一個Application Logic項目和一個Dataaccess項目(您稱之爲實體)完成的。您應該能夠在Application Logic項目的Web/MVC項目中引用參考。然後,您可以將Dataaccess的引用引入應用程序邏輯(或反之亦然)。

0

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

您有多種處理方法。

  1. UI和WebApi都是與單獨項目相同的解決方案的一部分。您知道可以將一個項目設置爲默認值,因此當您運行解決方案時,一個項目會自動運行。您可以右鍵單擊該解決方案,然後轉到屬性,然後選擇Common Properties,然後選擇多個啓動項目,並選擇所需的兩個項目,或者甚至多於兩個。然後,兩者都將運行並在運行解決方案時可用。

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

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

此外,您可以使您的生活更輕鬆,並將每個項目配置爲在適當的IIS中運行而不是IIS Express,然後您將不會獲得那些瘋狂的端口號,它基本上簡化了您的生活,另外它使得它更容易,點你需要在適當的IIS中部署這些東西,你將簡單地複製你已經擁有的東西

相關問題