2017-01-22 2 views
4

それを拒否したため、私はMVC MVC UIに3階層化アーキテクチャを使用しようとしています行わことはできなかった - >サービス - >エンティティに建てられ、私が使用しています接続なしで、ターゲットマシンが積極的に127.0.0.1:32450

私はajax呼び出しを行うときにポート35420.andで設定されているサービス層でWebAPIサービスをヒットするajax呼び出しを作成しています。状態500で以下のようなエラーが表示される

System.Net.Sockets.SocketException:ターゲットマシンが積極的にそれを拒否したため、接続できませんでした。127.0.0.1:32 450。

IISエクスプレスで見ると、4515のみが実行されており、35420サービス層は実行されていません。

この問題を解決するにはどうすればよいですか? UIレイヤが実行されているときに、サービスレイヤが自動的に並行して実行されるようにしたいのですか?私はこれに対してより良い解決策を達成できる方法はありますか?

ビジュアルスタジオ2013用に開発された組み込みIIS Expressを使用して、2つのプロジェクトで同じポート番号を設定することはできません。

Visual Studio 2013用のIIS Express組み込み開発サーバーでは、この2つのプロジェクトで同じポート番号を設定することは可能ですか?

の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の1つのソリューションに入れることができます。このようにして、サイトを実行すると、一度に1つのホスティングソリューションとして実行できます。通常、これは1つのWeb/MVCプロジェクト、Application Logicプロジェクト、Dataaccessプロジェクト(エンティティと呼ばれます)で行われます。 Application LogicプロジェクトのWeb/MVCプロジェクトで参照を取得することができます。次に、Dataaccessの参照をアプリケーションロジック(またはその逆)に引き込むことができます。

0

このように動作するアプリケーションは完全に正常です:ポート上のUIと別のポート上のwebapi。

これには複数の対応方法があります。

  1. UIとWebApiは、別々のプロジェクトと同じソリューションの一部です。 1つのプロジェクトをデフォルトに設定できるので、ソリューションを実行すると1つのプロジェクトが自動的に実行されます。ソリューションを右クリックしてプロパティを表示し、Common Propertiesを選択してから、複数の開始プロジェクトを選択して、2つ以上のプロジェクトを選択することもできます。

  2. UIとWebAPiは2つの異なるソリューションにあります。最初にAPiを起動してUIを起動するだけで、それぞれのポートで実行され、お互いに会話できるようになります。

いずれのソリューションを選択しても、すべてのレイヤーを個別に実行およびデバッグできます。

また、IISの代わりに適切なIISで動作するように各プロジェクトを簡単に構成し、それらのクレイジーなポート番号を取得することはできません。基本的に人生を単純化します。あなたは適切なIISにこのようなものを配備する必要があり、単にあなたが既に持っているものを複製するでしょう

関連する問題