天天看點

linux c調用wcf服務,Silverlight+WCF實作跨域調用

在這篇文章中,WCF扮演伺服器,向外提供LoginVaild服務;Silverlight扮演用戶端,調用WCF提供的LoginVaild服務。思路有了,下面進行代碼實作。

資料庫腳本實作

建立T_User表,在表中添加兩個字段username、password,向表中插入一條資料admin admin,腳本如下:

USE [test]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[T_User](

[username] [varchar](20) NOT NULL,

[password] [varchar](20) NOT NULL,

CONSTRAINT [PK_T_User] PRIMARY KEY CLUSTERED

(

[username] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

INSERT [dbo].[T_User] ([username], [password]) VALUES (N'admin', N'admin')

WCF伺服器實作

1.建立一個WCF服務庫項目,在預設生成的IServer1.cs接口在添加LoginVaild服務的聲明:

[OperationContract]

bool LoginVaild(string userName, string password);

2.添加ADO.Net實體資料模型檔案--Model.edmx,用于對資料表T_User的通路;

3.在Service1.svc中對LoginVaild方法進行實作:

public bool LoginVaild(string userName, string password)

{

bool result = false;

//需要通路的ADO.Net資料實體模型

using (SLtestEntitiesSecond entities = new SLtestEntitiesSecond())

{

var user = entities.T_User.Where(c => c.username == userName && c.password == password).SingleOrDefault();

if (user == null)

{

result = false;

}

else

{

result = true;

}

}

return result;

}

4.在項目的根目錄添加跨域通路檔案clientaccesspolicy.xml,内容如下:

5.設定WCF伺服器使用特定端口進行通路,方法:選中WCF伺服器項目-->郵件屬性-->Web-->特定端口,輸入1316。這樣保證我們每次可以通過1316端口通路WCF提供的服務。

到此,WCF伺服器端配置完成,選中Service1.svc檔案,在浏覽器中浏覽器下WCF提供的服務。

Silverlight用戶端實作

1.建立Silverlight應用程式,在引用中添加服務引用,在位址欄輸入Service1.svc檔案在浏覽器中的路徑,比如我的是:http://localhost:1316/Service1.svc;

2.建立Silverlight使用者控件Login.xaml檔案,在顯示頁面添加使用者名、密碼TextBox和登入Button;

3.在Login.xaml背景通過調用WCF提供的服務對使用者輸入進行判斷,代碼如下:

private void button1_Click(object sender, RoutedEventArgs e)

{

string userName = txtusername.Text.Trim();

string password = txtpassword.Text.Trim();

Service1Client client = new Service1Client();

client.LoginVaildCompleted += new EventHandler(client_LoginVaildCompleted);

client.LoginVaildAsync(userName, password);

client.CloseAsync();

}

void client_LoginVaildCompleted(object sender, LoginVaildCompletedEventArgs e)

{

if (e.Error == null)

{

//MessageBox.Show(e.Result.ToString());

if (e.Result == true)

{

this.Content = new MainPage();

}

else

{

MessageBox.Show("使用者名或密碼錯誤!");

}

}

else

{

MessageBox.Show(e.Error.ToString());

}

}

4.在App.xaml配置檔案設定Login.xaml為起始頁,代碼如下:

private void Application_Startup(object sender, StartupEventArgs e)

{

this.RootVisual = new Login();

}

到此,用戶端配置完成,運作Silverlight用戶端項目即可檢視結果。源碼下載下傳位址:

------------------------------------------分割線------------------------------------------

具體下載下傳目錄在 /2015年資料/2月/27日/Silverlight+WCF實作跨域調用/

------------------------------------------分割線------------------------------------------

現在回首整個實作過程,有點面向服務程式設計的意思:WCF提供一個服務,然後把通路服務的接口公開,想調用此服務的項目隻要添加此服務的引用便能調用WCF提供的服務。

在實作過程中,有個問題至今尚未解決,在WCF伺服器項目中配置ADO.Net實體資料模型時,如果是用SQL Server的SQL Server身份驗證方式登入,便會報“伺服器傳回了錯誤 Not found”異常;改成Windows身份驗證問題解決。這是個治标不治本的解決方案,對此問題,希望大神能夠給出解釋。

linux c調用wcf服務,Silverlight+WCF實作跨域調用