Maison base de données tutoriel mysql Silverlight通过httpBinding访问IIS宿主WCF

Silverlight通过httpBinding访问IIS宿主WCF

Jun 07, 2016 pm 03:11 PM
silverlight 访问 passer

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

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
 代码如下 复制代码
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>
Copier après la connexion
Student.cs 代码

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

StudentList.cs

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
 代码如下 复制代码
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>
Copier après la connexion
StudentService 代码

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
 代码如下 复制代码
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>
Copier après la connexion
站点WcfHost.web

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

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

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

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

WebConfig

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
 代码如下 复制代码
<?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>
Copier après la connexion
注意: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 代码

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
 代码如下 复制代码
<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>
Copier après la connexion
MainPage.cs 代码

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
 代码如下 复制代码

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>
Copier après la connexion

 

运行结果:

将” 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>
Copier après la connexion

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

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

iOS 17 : Comment contrôler quelles applications peuvent accéder à vos photos iOS 17 : Comment contrôler quelles applications peuvent accéder à vos photos Sep 13, 2023 pm 09:09 PM

Dans iOS17, Apple a plus de contrôle sur ce que les applications peuvent voir sur les photos. Lisez la suite pour savoir comment gérer l'accès aux applications par application. Sous iOS, le sélecteur de photos intégré à l'application d'Apple vous permet de partager des photos spécifiques avec l'application, tandis que le reste de votre photothèque reste privé. Les applications doivent demander l'accès à l'intégralité de votre photothèque et vous pouvez choisir d'accorder l'accès suivant aux applications : Accès restreint – Les applications ne peuvent voir que les images que vous pouvez sélectionner, ce que vous pouvez faire à tout moment dans l'application ou en accédant aux paramètres. > Confidentialité et sécurité > Photos pour afficher les images sélectionnées. Accès complet – L'application peut afficher des photos

Comment accéder aux champs, tableaux et objets imbriqués JSONNode en Java ? Comment accéder aux champs, tableaux et objets imbriqués JSONNode en Java ? Aug 30, 2023 pm 11:05 PM

Un JsonNode est le modèle d'arborescence JSON de Jackson qui peut lire JSON dans des instances JsonNode et écrire JsonNode dans JSON. Nous pouvons utiliser Jackson pour lire JSON dans un JsonNode en créant une instance ObjectMapper et en appelant la méthode readValue(). Nous pouvons accéder aux champs, tableaux ou objets imbriqués en utilisant la méthode get() de la classe JsonNode. Nous pouvons utiliser la méthode asText() pour renvoyer une représentation sous forme de chaîne valide et convertir la valeur du nœud en Javaint à l'aide de la méthode asInt() de la classe JsonNode. Dans l'exemple ci-dessous nous pouvons accéder à Json

Accédez aux métadonnées de divers fichiers audio et vidéo à l'aide de Python Accédez aux métadonnées de divers fichiers audio et vidéo à l'aide de Python Sep 05, 2023 am 11:41 AM

Nous pouvons accéder aux métadonnées des fichiers audio en utilisant Mutagen et le module eyeD3 en Python. Pour les métadonnées vidéo, nous pouvons utiliser des films et la bibliothèque OpenCV en Python. Les métadonnées sont des données qui fournissent des informations sur d'autres données, telles que des données audio et vidéo. Les métadonnées des fichiers audio et vidéo incluent le format de fichier, la résolution du fichier, la taille du fichier, la durée, le débit binaire, etc. En accédant à ces métadonnées, nous pouvons gérer les médias plus efficacement et analyser les métadonnées pour obtenir des informations utiles. Dans cet article, nous examinerons certaines des bibliothèques ou modules fournis par Python pour accéder aux métadonnées des fichiers audio et vidéo. Accéder aux métadonnées audio Certaines bibliothèques permettant d'accéder aux métadonnées des fichiers audio utilisent la mutagenèse

Comment résoudre le problème d'inaccessibilité après le déploiement du package de guerre par Tomcat Comment résoudre le problème d'inaccessibilité après le déploiement du package de guerre par Tomcat Jan 13, 2024 pm 12:07 PM

Comment résoudre le problème selon lequel Tomcat ne parvient pas à accéder au package war après son déploiement nécessite des exemples de code spécifiques. En tant que serveur Web Java largement utilisé, Tomcat permet aux développeurs de regrouper leurs propres applications Web développées dans des fichiers war pour le déploiement. Cependant, nous pouvons parfois rencontrer le problème de l'impossibilité d'accéder au package war après son déploiement. Cela peut être dû à une configuration incorrecte ou à d'autres raisons. Dans cet article, nous fournirons quelques exemples de code concrets qui résolvent ce dilemme. 1. Vérifiez le service Tomcat

Comment résoudre l'accès aux ressources externes et les appels dans le développement PHP Comment résoudre l'accès aux ressources externes et les appels dans le développement PHP Oct 08, 2023 am 11:01 AM

Comment résoudre le problème de l'accès et de l'appel à des ressources externes dans le développement PHP nécessite des exemples de code spécifiques. Dans le développement PHP, nous rencontrons souvent des situations dans lesquelles nous devons accéder et appeler des ressources externes, telles que des interfaces API, des bibliothèques tierces ou d'autres ressources de serveur. . Lorsque nous traitons avec ces ressources externes, nous devons réfléchir à la manière d'accéder et d'appeler en toute sécurité tout en garantissant performances et fiabilité. Cet article décrit plusieurs solutions courantes et fournit des exemples de code correspondants. 1. Utilisez la bibliothèque curl pour appeler des ressources externes. Curl est une bibliothèque open source très puissante.

Comment résoudre le problème d'accès refusé lors de la modification de fichiers sous Windows 7 Comment résoudre le problème d'accès refusé lors de la modification de fichiers sous Windows 7 Jul 04, 2023 pm 07:01 PM

Comment résoudre le problème d'accès refusé lors de la modification de fichiers sous win7 ? Lors de la modification de certains fichiers système, il nous sera souvent demandé que nous n'avons pas l'autorisation d'effectuer l'opération. Nous pouvons désactiver la fonction d'autorisations des dossiers ou obtenir des droits d'administrateur. Pour les utilisateurs qui ont besoin de modifier de tels fichiers, veuillez consulter les didacticiels détaillés suivants. Solution au problème d'accès refusé lors de la modification de fichiers sous Windows 7 : 1. Sélectionnez d'abord le dossier correspondant, cliquez sur l'outil ci-dessus et sélectionnez l'option du dossier. 2. Accédez à l'onglet Affichage. 3. Décochez Utiliser le partage de fichiers simple et confirmez. 4. Cliquez ensuite avec le bouton droit sur le dossier correspondant et cliquez sur Propriétés. 5. Accédez à l'onglet Sécurité. 6. Sélectionnez la position de l'icône et cliquez sur Avancé. 7

Que faire si les dossiers partagés ne sont pas accessibles dans Windows 10 Home Edition Que faire si les dossiers partagés ne sont pas accessibles dans Windows 10 Home Edition Jan 11, 2024 pm 07:36 PM

Le partage de dossiers est en effet une fonctionnalité extrêmement utile dans un environnement réseau domestique ou professionnel. Il vous permet de partager facilement des dossiers avec d'autres utilisateurs, facilitant ainsi le transfert et le partage de fichiers. Le dossier partagé Win10 Home Edition n'est pas accessible Solution : Solution 1 : Vérifiez la connexion réseau et les autorisations utilisateur Lorsque vous essayez d'utiliser le dossier partagé Win10, nous devons d'abord confirmer si la connexion réseau et les autorisations utilisateur sont normales. S'il y a un problème avec la connexion réseau ou si l'utilisateur n'est pas autorisé à accéder au dossier partagé, cela peut entraîner une inaccessibilité. 1. Tout d'abord, assurez-vous que la connexion réseau est fluide afin que l'ordinateur et l'ordinateur sur lequel se trouve le dossier partagé soient sur le même réseau local et puissent communiquer normalement. 2. Vérifiez ensuite les autorisations de l'utilisateur pour confirmer que l'utilisateur actuel est autorisé à partager des fichiers.

Autoriser l'accès aux appareils photo uniquement en HTML5 Autoriser l'accès aux appareils photo uniquement en HTML5 Sep 22, 2023 pm 11:09 PM

Il n'y a pas d'accès unique à l'appareil photo dans iOS. La recommandation officielle de la spécification est la suivante : il est recommandé aux implémentations d'agent utilisateur de cette spécification de demander le consentement de l'utilisateur avant de commencer à capturer du contenu via le microphone ou la caméra. Cela peut être nécessaire pour répondre aux exigences réglementaires, légales et aux meilleures pratiques liées à la confidentialité des données des utilisateurs. De plus, il est recommandé que les implémentations d'agent utilisateur fournissent une indication à l'utilisateur lorsqu'un périphérique d'entrée est activé et permettent à l'utilisateur de mettre fin à une telle capture. De même, il est recommandé aux agents utilisateurs de fournir des contrôles utilisateur, par exemple en permettant à l'utilisateur - de sélectionner le périphérique de capture multimédia exact à utiliser si plusieurs périphériques sont présents - pour le même. Désactivez la capture sonore en mode capture vidéo.

See all articles