- File->New Website->WCF Service->MyWCFService
- 按F5執行,記住browser 上的url http://localhost:1321/MyWCFService/Service.svc
- 使用Visual Studio 2010 Command Prompt,執行wcftestclient.exe
- Add Service
- 輸入服務URL
- 預設範本中提供一個IService Contract,以及有一個GetData Operation。你可以雙擊GetData,輸入參數,並按Invoke按鈕叫用服務。
- 修改IService.cs,ServiceContract與GetData Operation,加上Name與Namespace
[ServiceContract(
Name = "IContract",
Namespace = "http://www.test.com"
)]
public interface IService
{
[OperationContract(
Name = "DoGetData", Action = "http://www.test.com/DoGetData")]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
Name = "IContract",
Namespace = "http://www.test.com"
)]
public interface IService
{
[OperationContract(
Name = "DoGetData", Action = "http://www.test.com/DoGetData")]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
- 重複以上步驟,使用Visual Studio 2010 Command Prompt,執行wcftestclient.exe,服務的合約與Operation的名稱便會更改
- 加一個Console Client到Solution,ConClient
- ConClient,Add Service Reference->Discovery->OK
- 修改Main,設定Service Contract與Operation Contract名稱會影響Proxy類別的命名,因此Main程式要改如下,才可叫用服務
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConClient
{
class Program
{
static void Main(string[] args)
{
ServiceReference1.ContractClient proxy = new ServiceReference1.ContractClient();
Console.WriteLine(proxy.DoGetData(10));
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConClient
{
class Program
{
static void Main(string[] args)
{
ServiceReference1.ContractClient proxy = new ServiceReference1.ContractClient();
Console.WriteLine(proxy.DoGetData(10));
}
}
}
預設使用DataContract時,只有有標示DataMember的成員才會被序列化,設計DataContract時也可以套用很多attribute
- 修改MyWCFService,IService.cs,預設的CompositeType class,加上Namespace
- 執行svc,然後在 url 後方輸入?xsd=xsd0
- 可以看到namespace變更了
- 輸入 http://localhost:1321/MyWCFService/Service.svc?xsd=xsd2,CompositeType成員出現的順序跟程式碼的順序一致
- 修改程式碼,設定DataMember的Name與Order
[DataContract(Namespace = "http://www.aaa.com")]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember(Name = "myBoolValue", Order = 1)] public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember(Name = "myStringValue", Order = 0)] public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember(Name = "myBoolValue", Order = 1)] public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember(Name = "myStringValue", Order = 0)] public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
- 執行svc,然後在 url 後方輸入http://localhost:1321/MyWCFService/Service.svc?xsd=xsd2,順序就變化了
變更DataContract不會影響到Proxy的產生,因此ConClient程式不用做任何修改還是可以正常執行。
沒有留言:
張貼留言