WCF一步一步往前爬(一)

來源:互聯網
上載者:User

第一步:

我們將建議WCF服務,和一個用戶端。最後把它發布到IIS上。在開始建WCF服務之前,需要一個NBuilder.dll。我們有了它可以免去建資料庫的麻煩。

1、建立一個解決方案,右鍵添加建立網站,選擇WCF服務,地址自己確定。

2、將NBuilder引入到項目,在App_Code下建立兩個資料表類tblProduct.cs,tblProductInventory.cs

usingSystem;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespaceProducts
{
/// <summary>
///tblProduct 的摘要說明
/// </summary>
public class tblProduct
{
public tblProduct()
{
//
//TODO: 在此處添加建構函式邏輯
//
}

publicint ProductID;

publicstring Name;

publicstring ProductNumber;

///<summary>
/// 0 = 產品是購買的。1 = 產品是內部生產的。
/// </summary>
public bool MakeFlag;

///<summary>
//0 = 產品不可銷售。1 = 產品可銷售。
/// </summary>
public bool FinishedGoodsFlag;

publicstring Color;

////最小庫存量。
public int SafetyStockLevel;

///<summary>
/// 觸發採購訂單或工單的庫存水平。
/// </summary>
public int ReorderPoint;

///<summary>
/// 產品的標準成本。
/// </summary>
public decimal StandardCost;

///<summary>
/// 銷售價格。
/// </summary>
public decimal ListPrice;

///<summary>
/// 產品的規格。
/// </summary>
public string Size;

///<summary>
/// Size 列的測量單位。
/// </summary>
public string SizeUnitMeasureCode;

/// <summary>
/// Weight 列的測量單位。
/// </summary>
public string WeightUnitMeasureCode;

///<summary>
/// 產品的重量。
/// </summary>
public decimal Weight;

///<summary>
/// 生產產品所需的天數。
/// </summary>
public int DaysToManufacture;

///<summary>
/// R = 平地 M = 山地 T = 旅行S = 標準
/// </summary>
public string ProductLine;

///<summary>
/// H = 高 M = 中 L = 低
/// </summary>
public string Class;

///<summary>
/// W = 女式 M = 男式 U = 通用
/// </summary>
public string Style;

///<summary>
/// 產品所屬的產品子類別。指向ProductSubCategory.ProductSubCategoryID 的外鍵。
/// </summary>
public int ProductSubcategoryID;

///<summary>
/// 產品所屬的產品型號。指向ProductModel.ProductModelID 的外鍵。
/// </summary>
public int ProductModelID;

///<summary>
/// 產品開始銷售的日期。
/// </summary>
public DateTime SellStartDate;

///<summary>
/// 產品停止銷售的日期。
/// </summary>
public DateTime SellEndDate;

///<summary>
/// 產品停產的日期。
/// </summary>
public DateTime DiscontinuedDate;

///<summary>
/// 行的上次更新日期和時間。
/// </summary>
public DateTime ModifiedDate;
}
}

usingSystem;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespaceProducts
{
/// <summary>
///ProductInventory 的摘要說明
/// </summary>
public class tblProductInventory
{
public tblProductInventory()
{
//
//TODO: 在此處添加建構函式邏輯
//
}

///<summary>
/// 產品標識號。指向 Product.ProductID 的外鍵。
/// </summary>
public int ProductID;

/// <summary>
/// 庫存位置標識號。指向 Location.LocationID 的外鍵。
/// </summary>
public int LocationID;

/// <summary>
/// 庫存位置中的儲存間。
/// </summary>
public string Shelf;

///<summary>
/// 庫存位置中架子上的儲存容器。
/// </summary>
public int Bin;

/// <summary>
/// 庫存位置中的產品數量。
/// </summary>
public int Quantity;

/// <summary>
/// 行的上次更新日期和時間。
/// </summary>
public DateTime ModifiedDate;
}
}

2、將IService.cs重新命名IProductsService.cs

usingSystem;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespaceProducts
{
// 注意: 使用“重構”菜單上的“重新命名”命令,可以同時更改代碼和設定檔中的介面名“IService”。
[ServiceContract]
public interface IProductsService
{

//Get the product number of every product
[OperationContract]
List<string> ListProducts();
// Get the details of a single product
[OperationContract]
ProductData GetProduct(string productNumber);
// Get the current stock level for a product
[OperationContract]
int CurrentStockLevel(string productNumber);
// Change the stock level for a product
[OperationContract]
bool ChangeStockLevel(string productNumber, short newStockLevel, string shelf,int bin);
}
}

3、將Service.cs重新命名ProductsService.cs

usingSystem;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using FizzWare.NBuilder;
// 注意: 使用“重構”菜單上的“重新命名”命令,可以同時更改代碼、服務和設定檔中的類名“Service”。
namespace Products
{
[DataContract]
public class ProductData
{
[DataMember]
public string Name;
[DataMember]
public string ProductNumber;
[DataMember]
public string Color;
[DataMember]
public decimal ListPrice;
}

publicclass ProductsServiceImpl : IProductsService
{
static IList<tblProduct> ps =Builder<tblProduct>.CreateListOfSize(50).Build();
static IList<tblProductInventory> pis = Builder<tblProductInventory>.CreateListOfSize(50).Build();

publicList<string> ListProducts()
{
var p = ps.Select(item => item.ProductNumber).ToList();

returnp;
}

publicProductData GetProduct(string productNumber)
{

ProductData productData = null;
tblProduct matchingProduct = ps.First(item =>string.Compare(item.ProductNumber, productNumber) == 0);

productData= new ProductData()
{
Name = matchingProduct.Name,
ProductNumber = matchingProduct.ProductNumber,
Color = matchingProduct.Color,
ListPrice = matchingProduct.ListPrice
};

returnproductData;
}

public int CurrentStockLevel(stringproductNumber)
{
int stockLevel = 0;

// Calculate the sum of all quantities for the specified product
stockLevel = (from pi in pis
join p in ps
on pi.ProductID equals p.ProductID
where String.Compare(p.ProductNumber, productNumber) == 0
select (int)pi.Quantity).Sum();

returnstockLevel;
}

publicbool ChangeStockLevel(string productNumber, short newStockLevel, string shelf,int bin)
{
//var pr = Builder<tblProduct>.CreateListOfSize(50).Build();
//var pri = Builder<tblProductInventory>.CreateListOfSize(50).Build();
int productID = (from p in ps
where String.Compare(p.ProductNumber, productNumber) == 0
select p.ProductID).First();
// Find the ProductInventory object that matches the parameters passed
// in to the operation
tblProductInventory productInventory = pis.First(
pi => String.Compare(pi.Shelf, shelf) == 0 &&
pi.Bin == bin && pi.ProductID == productID);
// Update the stock level for the ProductInventory object
productInventory.Quantity += newStockLevel;
// Save the change back to the database

returntrue;
}
}
}

4、Service.svc重新命名為ProductsService.svc

<%@ServiceHost Language="C#" Debug="true"Service="Products.ProductsServiceImpl"CodeBehind="~/App_Code/ProductsService.cs" %>

5、建立一個控制台用戶端,命名為ProductsClient,添加對上面WCF的服務命名為ProductsService。在static void Main(string[] args){}中添加代碼:

staticvoid Main(string[] args)
{
using (ProductsServiceClient proxy = new ProductsServiceClient())
{
// Test the operations in the service
// Obtain a list of all products
Console.WriteLine("Test 1: List all products");
string[] productNumbers = proxy.ListProducts();
foreach (string productNumber in productNumbers)
{
Console.WriteLine("Number: {0}", productNumber);
}
Console.WriteLine();

Console.WriteLine("Test2: Display the details of a product");
ProductData product = proxy.GetProduct("ProductNumber1");
Console.WriteLine("Number: {0}", product.ProductNumber);
Console.WriteLine("Name: {0}", product.Name);
Console.WriteLine("Color: {0}", product.Color);
Console.WriteLine("Price: {0}", product.ListPrice);
Console.WriteLine();

Console.WriteLine("Test3: Display the stock level of a product");
int numInStock = proxy.CurrentStockLevel("ProductNumber2");
Console.WriteLine("Current stock level: {0}", numInStock);
Console.WriteLine();

Console.WriteLine("Test4: Modify the stock level of a product");
if (proxy.ChangeStockLevel("ProductNumber3", 100, "Shelf3",3))
{
numInStock = proxy.CurrentStockLevel("ProductNumber3");
Console.WriteLine("Stock changed. Current stock level: {0}",numInStock);
}
}
Console.ReadKey();
}

將ProductsClient設為啟動項目,看看運行結果。

 

右鍵WCF項目,選擇發布網站,在目標位置欄,點擊"..."開啟對話方塊。選擇“本地IIS”,點擊“DefaultWeb Site”然後在右上方點擊“建立新Web應用程式”,命名為ProductsService

OK,你發布成功了。

然後,在ProductsClient項目中,開啟app.config。<client></client>中的endpoint address重新指向IIS服務。如

<client>
<endpoint address="http://localhost/ProductsService/ProductsService.svc"
binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_IProductsService"
contract="ProductsService.IProductsService"name="BasicHttpBinding_IProductsService" />
</client>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.