搜尋
首頁資料庫mysql教程Silverlight通过httpBinding访问IIS宿主WCF

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>
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.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>
类库LxServices:( 改类库包括一个模仿获取数据库集合类StudentList.cs和服务类StudentService.cs)

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>
StudentService 代码


 代码如下 复制代码
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

站点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>
注意:endpoint中的address 为空:因为svc文件的地址就是元数据发布的地址。

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>
MainPage.cs 代码


 代码如下 复制代码

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的演示我们就进行到这里

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何在Java中访问JsonNode的JSON字段、数组和嵌套对象?如何在Java中访问JsonNode的JSON字段、数组和嵌套对象?Aug 30, 2023 pm 11:05 PM

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

iOS 17:如何控制哪些应用程序可以访问您的照片iOS 17:如何控制哪些应用程序可以访问您的照片Sep 13, 2023 pm 09:09 PM

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

使用Python访问各种音频和视频文件的元数据使用Python访问各种音频和视频文件的元数据Sep 05, 2023 am 11:41 AM

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

解决Tomcat部署war包后无法访问的问题的方法解决Tomcat部署war包后无法访问的问题的方法Jan 13, 2024 pm 12:07 PM

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

win7修改文件提示更改权限拒绝访问如何解决win7修改文件提示更改权限拒绝访问如何解决Jul 04, 2023 pm 07:01 PM

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

win10家庭版共享文件夹无法访问怎么办win10家庭版共享文件夹无法访问怎么办Jan 11, 2024 pm 07:36 PM

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

如何解决PHP开发中的外部资源访问和调用如何解决PHP开发中的外部资源访问和调用Oct 08, 2023 am 11:01 AM

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

只允许在HTML5中访问相机设备只允许在HTML5中访问相机设备Sep 22, 2023 pm 11:09 PM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

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

mPDF

mPDF

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器