Rumah pangkalan data tutorial mysql Silverlight通过httpBinding访问IIS宿主WCF

Silverlight通过httpBinding访问IIS宿主WCF

Jun 07, 2016 pm 03:11 PM
silverlight akses lulus

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

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码
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>
Salin selepas log masuk
Student.cs 代码

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码
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>
Salin selepas log masuk
类库LxServices:( 改类库包括一个模仿获取数据库集合类StudentList.cs和服务类StudentService.cs)

StudentList.cs

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码
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>
Salin selepas log masuk
StudentService 代码

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码
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>
Salin selepas log masuk
站点WcfHost.web

站点WcfHost.web,这是一个Asp.net 空web应用程序。

1、右击” WcfHost.web”—“添加”—“新建项”—“wcf服务”,命名为”StudentSrv.svc” 。如图:

在项目中删除”StudentSrv.svc.cs”文件和”IStudentSrv.cs”文件。右击”StudentSrv.svc”文件,选择”查看标记”,将代码修改为:

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

 2、修改webconfig 文件,代码如下:

WebConfig

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码
<?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>
Salin selepas log masuk
注意: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 代码

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码
<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>
Salin selepas log masuk
MainPage.cs 代码

Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
 代码如下 复制代码

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>
Salin selepas log masuk

 

运行结果:

将” 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>
Salin selepas log masuk

再次运行,结果如下图所示:

至此,Silverlight通过httbBingding方式访问IIS宿主的WCF的演示我们就进行到这里

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

iOS 17: Cara mengawal apl yang boleh mengakses foto anda iOS 17: Cara mengawal apl yang boleh mengakses foto anda Sep 13, 2023 pm 09:09 PM

Dalam iOS17, Apple mempunyai lebih kawalan ke atas perkara yang boleh dilihat oleh apl dalam foto. Teruskan membaca untuk mengetahui cara mengurus akses apl mengikut apl. Dalam iOS, pemilih foto dalam apl Apple membolehkan anda berkongsi foto tertentu dengan apl itu, manakala pustaka foto anda yang lain kekal peribadi. Apl mesti meminta akses kepada keseluruhan pustaka foto anda dan anda boleh memilih untuk memberikan akses berikut kepada apl: Akses Terhad – Apl hanya boleh melihat imej yang anda boleh pilih, yang boleh anda lakukan pada bila-bila masa dalam apl atau dengan pergi ke Tetapan &gt ;Privasi & Keselamatan&gt;Foto untuk melihat imej yang dipilih. Akses penuh - Apl boleh melihat foto

Bagaimana untuk mengakses medan JSON, tatasusunan dan objek bersarang JSONNode di Java? Bagaimana untuk mengakses medan JSON, tatasusunan dan objek bersarang JSONNode di Java? Aug 30, 2023 pm 11:05 PM

JsonNode ialah model pokok JSON Jackson yang boleh membaca JSON ke dalam contoh JsonNode dan menulis JsonNode ke dalam JSON. Kita boleh menggunakan Jackson untuk membaca JSON ke dalam JsonNode dengan mencipta contoh ObjectMapper dan memanggil kaedah readValue(). Kita boleh mengakses medan, tatasusunan atau objek bersarang menggunakan kaedah get() kelas JsonNode. Kita boleh menggunakan kaedah asText() untuk mengembalikan perwakilan rentetan yang sah dan menukar nilai nod kepada Javaint menggunakan kaedah asInt() kelas JsonNode. Dalam contoh di bawah kita boleh mengakses Json

Akses metadata pelbagai fail audio dan video menggunakan Python Akses metadata pelbagai fail audio dan video menggunakan Python Sep 05, 2023 am 11:41 AM

Kami boleh mengakses metadata fail audio menggunakan Mutagen dan modul eyeD3 dalam Python. Untuk metadata video kita boleh menggunakan filem dan perpustakaan OpenCV dalam Python. Metadata ialah data yang menyediakan maklumat tentang data lain, seperti data audio dan video. Metadata untuk fail audio dan video termasuk format fail, resolusi fail, saiz fail, tempoh, kadar bit, dsb. Dengan mengakses metadata ini, kami boleh mengurus media dengan lebih cekap dan menganalisis metadata untuk mendapatkan beberapa maklumat berguna. Dalam artikel ini, kita akan melihat beberapa perpustakaan atau modul yang disediakan oleh Python untuk mengakses metadata fail audio dan video. Akses metadata audio Sesetengah perpustakaan untuk mengakses metadata fail audio adalah - menggunakan mutagenesis

Bagaimana untuk menyelesaikan masalah tidak dapat diakses selepas Tomcat menggunakan pakej perang Bagaimana untuk menyelesaikan masalah tidak dapat diakses selepas Tomcat menggunakan pakej perang Jan 13, 2024 pm 12:07 PM

Bagaimana untuk menyelesaikan masalah bahawa Tomcat tidak boleh berjaya mengakses pakej perang selepas menggunakan ia memerlukan contoh kod khusus Sebagai pelayan Web Java yang digunakan secara meluas, Tomcat membenarkan pemaju untuk membungkus aplikasi Web mereka sendiri yang dibangunkan ke dalam fail perang untuk penggunaan. Walau bagaimanapun, kadangkala kita mungkin menghadapi masalah tidak berjaya mengakses pakej perang selepas menggunakannya. Ini mungkin disebabkan oleh konfigurasi yang salah atau sebab lain. Dalam artikel ini, kami akan menyediakan beberapa contoh kod konkrit yang menangani dilema ini. 1. Semak perkhidmatan Tomcat

Bagaimana untuk menyelesaikan akses sumber luaran dan panggilan dalam pembangunan PHP Bagaimana untuk menyelesaikan akses sumber luaran dan panggilan dalam pembangunan PHP Oct 08, 2023 am 11:01 AM

Cara menyelesaikan masalah mengakses dan memanggil sumber luaran dalam pembangunan PHP memerlukan contoh kod khusus Dalam pembangunan PHP, kita sering menghadapi situasi di mana kita perlu mengakses dan memanggil sumber luaran, seperti antara muka API, perpustakaan pihak ketiga atau sumber pelayan lain. . Apabila berurusan dengan sumber luaran ini, kita perlu mempertimbangkan cara mengakses dan membuat panggilan dengan selamat sambil memastikan prestasi dan kebolehpercayaan. Artikel ini menerangkan beberapa penyelesaian biasa dan menyediakan contoh kod yang sepadan. 1. Gunakan perpustakaan curl untuk memanggil sumber luaran Curl ialah perpustakaan sumber terbuka yang sangat berkuasa.

Bagaimana untuk menyelesaikan masalah akses dinafikan apabila mengubah suai fail dalam Windows 7 Bagaimana untuk menyelesaikan masalah akses dinafikan apabila mengubah suai fail dalam Windows 7 Jul 04, 2023 pm 07:01 PM

Bagaimana untuk menyelesaikan masalah akses dinafikan apabila mengubah suai fail dalam win7? Apabila mengubah suai beberapa fail sistem, kami selalunya akan digesa bahawa kami tidak mempunyai kebenaran untuk melaksanakan operasi. Kami boleh mematikan kebenaran folder atau mendapatkan hak pentadbir. Bagi pengguna yang perlu mengubah suai fail tersebut, sila lihat tutorial terperinci berikut. Penyelesaian kepada masalah akses ditolak apabila mengubah suai fail dalam Windows 7: 1. Mula-mula pilih folder yang sepadan, klik alat di atas, dan pilih pilihan folder. 2. Masukkan tab Lihat. 3. Nyahtanda Gunakan Perkongsian Fail Mudah dan sahkan. 4. Kemudian klik kanan folder yang sepadan dan klik Properties. 5. Masukkan tab Keselamatan. 6. Pilih kedudukan ikon dan klik Lanjutan. 7

Perkara yang perlu dilakukan jika folder kongsi tidak boleh diakses dalam Windows 10 Home Edition Perkara yang perlu dilakukan jika folder kongsi tidak boleh diakses dalam Windows 10 Home Edition Jan 11, 2024 pm 07:36 PM

Berkongsi folder sememangnya ciri yang sangat berguna dalam persekitaran rangkaian rumah atau perniagaan Ia membolehkan anda berkongsi folder dengan pengguna lain dengan mudah, dengan itu memudahkan pemindahan dan perkongsian fail. Folder kongsi Win10 Home Edition tidak boleh diakses Penyelesaian: Penyelesaian 1: Semak sambungan rangkaian dan kebenaran pengguna Apabila cuba menggunakan folder kongsi Win10, pertama sekali kami perlu mengesahkan sama ada sambungan rangkaian dan kebenaran pengguna adalah normal. Jika terdapat masalah dengan sambungan rangkaian atau pengguna tidak mempunyai kebenaran untuk mengakses folder kongsi, ia mungkin mengakibatkan tidak dapat diakses. 1. Mula-mula, sila pastikan sambungan rangkaian lancar supaya komputer dan komputer tempat folder kongsi berada berada dalam LAN yang sama dan boleh berkomunikasi secara normal. 2. Kedua, semak kebenaran pengguna untuk mengesahkan bahawa pengguna semasa mempunyai kebenaran untuk berkongsi fail.

Benarkan akses peranti kamera hanya dalam HTML5 Benarkan akses peranti kamera hanya dalam HTML5 Sep 22, 2023 pm 11:09 PM

Tiada akses unik kepada peranti kamera dalam iOS. Pengesyoran spesifikasi rasmi adalah seperti berikut - Pelaksanaan ejen pengguna bagi spesifikasi ini disyorkan untuk meminta persetujuan pengguna sebelum mula menangkap kandungan melalui mikrofon atau kamera. Ini mungkin perlu untuk memenuhi keperluan peraturan, undang-undang dan amalan terbaik yang berkaitan dengan privasi data pengguna. Selain itu, adalah disyorkan bahawa pelaksanaan ejen pengguna memberikan petunjuk kepada pengguna apabila peranti input didayakan dan membolehkan pengguna menamatkan tangkapan tersebut. Begitu juga, ejen pengguna disyorkan untuk menyediakan kawalan pengguna, seperti membenarkan pengguna - memilih peranti tangkapan media yang tepat untuk digunakan jika berbilang peranti hadir - untuk perkara yang sama. Lumpuhkan tangkapan bunyi dalam mod tangkapan video.

See all articles