建置時Services端要先建好,否則client端會呼叫不到,
先建立服務專案,C# -> Windows -> Windows服務
編寫一些程式碼,這邊用一個文字檔紀錄,主要部分
namespace Service_with_WCF
{
public partial class ServicePart : ServiceBase
{
protected override void OnStart(string[] args)
{
StreamWriter sw = new StreamWriter(@"C:\log.txt");
sw.WriteLine("服務啟動 " + DateTime.Now.ToString());
sw.Close();
}
}
}
服務必須被"安裝"之後才能執行,加入一個服務安裝類別屬性設置,依個人喜好,Visual Studio有說明提示
加入WCF部分,注意:是新增在服務底下的新項目,不是新增專案
WCF加入後會有一個介面(Interface)類別,一個實體類別以及app.config
介面定義了外部要呼叫的方法名稱,以下為主要部份
namespace Service_with_WCF
{
[ServiceContract]
public interface IWCF_Service
{
[OperationContract]
string DoWork(string name);
}
public class WCF_Service : IWCF_Service
{
public string DoWork(string name)
{
return "Hello" + name;
}
}
}
app.config最重要的部分在於"呼叫位置",系統會自動產生,其他部分依情況修改<add baseAddress="http://localhost:8732/Design_Time_Addresses/Service_with_WCF/WCF_Service/" />
加入一個安裝專案佈署此服務
在服務類別宣告ServiceHost物件,其實就是WCF物件
namespace Service_with_WCF
{
public partial class ServicePart : ServiceBase
{
protected override void OnStart(string[] args)
{
ServiceHost host = new ServiceHost(typeof(WCF_Service));
host.Open();
StreamWriter sw = new StreamWriter(@"C:\log.txt");
sw.WriteLine("服務啟動 " + DateTime.Now.ToString());
sw.Close();
}
}
}
安裝專案的自訂動作 -> 應用程式資料夾 -> 加入輸出,把剛剛做的服務加進來
建置,佈署,第一次要手動啟動服務,
可以看到剛剛建立的ExampleService已經成功佈署完成
加入Client端的新專案,這邊用主控台應用程式,
專案 -> 加入服務參考 -> 輸入服務位置就可以看到剛剛佈署的Host
撰寫Client端程式碼,宣告一個服務的Client
namespace Client
{
class Program
{
static void Main(string[] args)
{
ServiceReference1.WCF_ServiceClient serviceClient = new ServiceReference1.WCF_ServiceClient();
string resultStr = serviceClient.DoWork(" Sean");
Console.WriteLine(resultStr);
Console.Read();
}
}
}
成功的呼叫了服務端的方法