silverlight和wcf通信是大家开发中用得相对较多的东西,我以Silverlight 通过 httpBinding 访问 IIS 宿主 WCF 来简单介绍一下。 Silverlight 通过 httpBiding方式 访问 IIS 宿主 WCF是我们在Silverlight与WCF通信中最为常见的,也是用的最多的,我们用个很简
silverlight和wcf通信是大家开发中用得相对较多的东西,我以Silverlight通过httpBinding访问IIS宿主WCF 来简单介绍一下。
Silverlight通过httpBiding方式访问IIS宿主WCF是我们在Silverlight与WCF通信中最为常见的,也是用的最多的,我们用个很简单的例子进行演示。
项目结构:
项目目结构简单说明:
程序集名称 | 需添加的引用 | 简要说明 |
LxContracts | System.Runtime.Serialization System.ServiceModel | 用于存放操作契约与数据契约 |
LxServices | LxContracts[项目] | 服务,操作契约的实现 |
WcfHost.web | LxContracts[项目] 和LxServices[项目] | 利用Svc文件发布服务的站点 |
SilverlightDemo | Silverlight程序,调用WCF服务 |
注意:建立Silverlight程序的时候,不需要承载网站,建立一个单一的Silverlight程序即可,这样做的原因是,把Silverlight和WCF服务不放到同一个站点下面,是为了演示跨域的问题。
代码实现:
类库LxContracts:(包括数据契约Student.cs和操作契约IStudent.cs)
Student.cs 代码
代码如下 | 复制代码 |
using<span> System; </span>using<span> System.Collections.Generic; </span>using<span> System.Linq; </span>using<span> System.Text; </span>using<span> System.ServiceModel; </span>using<span> System.Runtime.Serialization; </span>namespace<span> LxContracts { [DataContract] </span>public class<span> Student { </span>/// <summary> ///<span> 学生编号 </span>/// </summary> <span> [DataMember] </span>public int StuId { get; set<span>; } </span>/// <summary> ///<span> 学生姓名 </span>/// </summary> <span> [DataMember] </span>public string StuName { get; set<span>; } </span>/// <summary> ///<span> 所在班级 </span>/// </summary> <span> [DataMember] </span>public string ClassName { get; set<span>; } </span>/// <summary> ///<span> 联系电话 </span>/// </summary> <span> [DataMember] </span>public string TelPhoneNum { get; set<span>; } } }</span> |
代码如下 | 复制代码 |
using<span> System; </span>using<span> System.Collections.Generic; </span>using<span> System.Linq; </span>using<span> System.Text; </span>using<span> System.Runtime.Serialization; </span>using<span> System.ServiceModel; </span>namespace<span> LxContracts { [ServiceContract] </span>public interface<span> IStudent { [OperationContract] List</span><student><span> GetStudent(); } }</span></student> |
StudentList.cs
代码如下 | 复制代码 |
using<span> System; </span>using<span> System.Collections.Generic; </span>using<span> System.Linq; </span>using<span> System.Text; </span>using<span> LxContracts; </span>namespace<span> LxServices { </span>public class StudentList:List<student><span> { </span>public<span> StudentList() { </span>this.Add(new Student() { StuId = 1, StuName = "小明", ClassName = "计算机一班", TelPhoneNum = "123456"<span> }); </span>this.Add(new Student() { StuId = 2, StuName = "小红", ClassName = "计算机二班", TelPhoneNum = "234567"<span> }); </span>this.Add(new Student() { StuId = 2, StuName = "小兰", ClassName = "计算机三班", TelPhoneNum = "890123"<span> }); } } }</span></student> |
代码如下 | 复制代码 |
using<span> System; </span>using<span> System.Collections.Generic; </span>using<span> System.Linq; </span>using<span> System.Text; </span>using<span> LxContracts; </span>namespace<span> LxServices { </span>public class<span> StudentService:IStudent { </span>public List<student><span> GetStudent() { </span>//<span>实际情况应该为从数据库读取 </span>//本例手动生成一个StudentList StudentList ListStuent = new<span> StudentList(); </span>return<span> ListStuent; } } }</span></student> |
站点WcfHost.web,这是一个Asp.net 空web应用程序。
1、右击” WcfHost.web”—“添加”—“新建项”—“wcf服务”,命名为”StudentSrv.svc” 。如图:
在项目中删除”StudentSrv.svc.cs”文件和”IStudentSrv.cs”文件。右击”StudentSrv.svc”文件,选择”查看标记”,将代码修改为:
2、修改webconfig 文件,代码如下:
WebConfig
代码如下 | 复制代码 |
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetframework="4.0"></compilation> </system.web> <system.servicemodel> <behaviors> <servicebehaviors> <behavior name="LxBehavior"> <servicemetadata httpgetenabled="true"></servicemetadata> <servicedebug includeexceptiondetailinfaults="false"></servicedebug> </behavior> </servicebehaviors> </behaviors> <services> <service name="LxServices.StudentService" behaviorconfiguration="LxBehavior"> <endpoint address="" binding="basicHttpBinding" contract="LxContracts.IStudent"></endpoint> </service> </services> <!--关闭 ASP.NET 兼容性模式--> <servicehostingenvironment aspnetcompatibilityenabled="false"></servicehostingenvironment> </system.servicemodel> </configuration> |
3、右击”StudentSrv.svc”文件,在”浏览器中查看”,显示如下图,说明服务已经部署好了,我用的端口是 9090:
在Silverlight中进行调用:
Silverlight调用wcf很简单,直接在”SilverlightDemo”中添加”服务引用即可”,Silverlight项目中会自动生成” ServiceReferences.ClientConfig”配置文件,当然也可以利用代码的方式调用,但是我比较懒 :)。
1、为Silverlight程序添加WCF:
“右击”—“SiverlightDemo”—“添加服务引用”—“输入服务地址”(我的是http://localhost:9090/WCF/StudentSrv.svc)--点击“前往”,就会找到服务,命名为“WCF.StudentSrv”后,点击“确定”
2、在Silverlight中调用WCF:
MainPage.xaml中添加”DataGrid”控件,xaml代码如下:
MainPage.xaml 代码
代码如下 | 复制代码 |
<datagrid x:name="dgStudnet" grid.row="0" autogeneratecolumns="False"> <datagrid.columns> <datagridtextcolumn header="学生编号" width="80" binding="{Binding StuId}"></datagridtextcolumn> <datagridtextcolumn header="学生姓名" width="100" binding="{Binding StuName}"></datagridtextcolumn> <datagridtextcolumn header="所在班级" width="120" binding="{Binding ClassName}"></datagridtextcolumn> <datagridtextcolumn header="电话号码" width="100" binding="{Binding TelPhoneNum}"></datagridtextcolumn> </datagrid.columns> </datagrid> |
代码如下 | 复制代码 |
public partial class<span> MainPage : UserControl { ObservableCollection</span><student><span> listStudent; </span>public<span> MainPage() { InitializeComponent(); listStudent </span>= new ObservableCollection<student><span>(); </span>this.Loaded += new<span> RoutedEventHandler(MainPage_Loaded); } </span>void MainPage_Loaded(object<span> sender, RoutedEventArgs e) { StudentClient proxyClient </span>= new<span> StudentClient(); proxyClient.GetStudentAsync(); proxyClient.GetStudentCompleted </span>+= new EventHandler<getstudentcompletedeventargs><span>(proxyClient_GetStudentCompleted); } </span>void proxyClient_GetStudentCompleted(object<span> sender, GetStudentCompletedEventArgs e) { </span>if (e.Error == null<span>) { listStudent </span>=<span> e.Result; </span>this.dgStudnet.ItemsSource =<span> listStudent; } } }</span></getstudentcompletedeventargs></student></student>
|
将” SilverlightDemo”设置为启动项目,运行,会产生下面的异常:
这就是因为当时建立项目的时候没有把Silverlight程序和WCF服务放到同一个站点的缘故,因此需要在发布WCF的网站根目录放置一个跨域文件:clientaccesspolicy.xml
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="SOAPAction"> <domain uri="*"></domain> </allow-from> <grant-to> <resource path="/" include-subpaths="true"></resource> </grant-to> </policy> </cross-domain-access> </access-policy>
再次运行,结果如下图所示:
至此,Silverlight通过httbBingding方式访问IIS宿主的WCF的演示我们就进行到这里

一个JsonNode是Jackson的JSON树模型,它可以将JSON读取为JsonNode实例,并将JsonNode写入JSON。通过创建ObjectMapper实例并调用readValue()方法,我们可以使用Jackson将JSON读取为JsonNode。我们可以使用JsonNode类的get()方法访问字段、数组或嵌套对象。我们可以使用asText()方法返回有效的字符串表示,并使用JsonNode类的asInt()方法将节点的值转换为Javaint。在下面的示例中,我们可以访问Json

在iOS17中,Apple可以更好地控制应用程序可以看到的照片内容。继续阅读,了解如何按应用管理应用访问权限。在iOS中,Apple的应用内照片选取器可让您与应用共享特定照片,而照片图库的其余部分则保持私密。应用必须请求访问您的整个照片图库,您可以选择授予应用以下访问权限:受限访问–应用程序只能看到您可以选择的图像,您可以随时在应用程序中或通过转到“设置”>“隐私和安全”>“照片”来查看所选图像。完全访问权限–App可以查看照片

我们可以使用Mutagen和Python中的eyeD3模块访问音频文件的元数据。对于视频元数据,我们可以使用电影和Python中的OpenCV库。元数据是提供有关其他数据(例如音频和视频数据)的信息的数据。音频和视频文件的元数据包括文件格式、文件分辨率、文件大小、持续时间、比特率等。通过访问这些元数据,我们可以更有效地管理媒体并分析元数据以获得一些有用的信息。在本文中,我们将了解Python提供的一些用于访问音频和视频文件元数据的库或模块。访问音频元数据一些用于访问音频文件元数据的库是-使用诱变

如何解决Tomcat部署war包后无法成功访问的困扰,需要具体代码示例Tomcat作为一个广泛使用的JavaWeb服务器,允许开发人员将自己开发的Web应用打包为war文件进行部署。然而,有时候我们可能会遇到部署war包后无法成功访问的问题,这可能是由于配置不正确或其他原因引起的。在本文中,我们将提供一些解决这个困扰的具体代码示例。一、检查Tomcat服务

win7修改文件提示更改权限拒绝访问如何解决?一些系统文件在进行修改的时候,常常会提示我们没有权限去进行操作。我们可以去进行文件夹权限的功能关闭,或者获取管理员权限。需要修改此类文件的用户,一起来看看接下来具体的教程分享吧。win7修改文件提示更改权限拒绝访问解决办法 1、首先选中对应文件夹,点击上方工具,选中文件夹选项。 2、进入查看选项卡。 3、取消勾选使用简单文件共享然后确定。 4、然后右键选择对应文件夹,点击属性。 5、进入安全选项卡。 6、选择图示位置,点击高级。 7

在家庭或企业网络环境下,共享文件夹确实是一项极其实用的功能,它能让您轻松地将文件夹分享给其他用户,从而便于文件的传输与分享。win10家庭版共享文件夹无法访问解决方法:解决方案一:检查网络连接和用户权限在尝试使用Win10共享文件夹时,我们首先需要确认网络连接及用户权限是否正常。若网络连接存在故障或用户未获得访问共享文件夹的权限,便可能导致无法访问的现象。1、首先请确保网络连接顺畅,以便计算机与共享文件夹所在的计算机在同一局域网中,能够正常进行通信。2、其次检查用户权限,确认当前用户对于共享文件

如何解决PHP开发中的外部资源访问和调用,需要具体代码示例在PHP开发中,我们经常会遇到需要访问和调用外部资源的情况,比如API接口、第三方库或者其他服务器资源。在处理这些外部资源时,我们需要考虑如何进行安全的访问和调用,同时保证性能和可靠性。本文将介绍几种常见的解决方案,并提供相应的代码示例。一、使用curl库进行外部资源调用curl是一个非常强大的开源库

iOS中无法唯一访问相机设备。官方规范建议如下-建议该规范的用户代理实现在开始通过麦克风或摄像头捕获内容之前征求用户同意。这可能是满足与用户数据隐私相关的监管、法律和最佳实践要求所必需的。此外,建议用户代理实现在输入设备启用时向用户提供指示,并使用户可以终止此类捕获。同样,用户代理建议提供用户控制,例如允许用户-如果存在多个设备,则选择要使用的确切媒体捕获设备相同。在视频捕获模式下禁用声音捕获。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器