天天看点

使用Silverlight的WCF模板问题

环境配置:Silverlight 2 tools for visual studio 2008 sp1

               VSTS2008 +sp1 

               MSSQLSERVER2005

启用 Silverlight 的 WCF 模板

您可以通过在 Visual Studio? 中创新建一个 WCF 项目来构建可与 Silverlight 应用程序进行通信的 WCF 服务。

作为创建 WCF 服务的替代方法,您可以在 Visual Studio 中选择文件项目模板来创建启用 Silverlight 的 WCF 服务。 显示的是 Visual Studio 中的新项目模板。据说此模板会自动将绑定设置为 basicHttpBinding 并添加一些属性,以使服务与 ASP.NET 兼容。尽管此方法可为您设置正确的绑定配置,但不要忘记您仍可使用现有的 WCF 服务,但前提是这些绑定是针对 basicHttpBinding 设置的。

只要 Silverlight 应用程序具有 basicHttpBinding 类型的绑定,它就可以调用标准的 WCF 服务。您必须确保自己可将 WCF 服务的默认绑定从 customBinding 更改为 basicHttpBinding,否则必须新建一个 basicHttpBinding 类型的绑定。WCF 服务宿主应用程序的 web.config 文件包含用来定义服务配置的以下 XML。

在我的VS2008英文版中,web.config 为WCF多配置了如下信息;

使用Silverlight的WCF模板问题

 <system.serviceModel>

使用Silverlight的WCF模板问题

  <behaviors>

使用Silverlight的WCF模板问题

   <serviceBehaviors>

使用Silverlight的WCF模板问题

    <behavior name="wcf.WCFBehavior">

使用Silverlight的WCF模板问题

     <serviceMetadata httpGetEnabled="true" />

使用Silverlight的WCF模板问题

     <serviceDebug includeExceptionDetailInFaults="false" />

使用Silverlight的WCF模板问题

    </behavior>

使用Silverlight的WCF模板问题

   </serviceBehaviors>

使用Silverlight的WCF模板问题

  </behaviors>

使用Silverlight的WCF模板问题

  <bindings>

使用Silverlight的WCF模板问题

    <customBinding>

使用Silverlight的WCF模板问题

      <binding name="customBinding0">

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

      </binding>

使用Silverlight的WCF模板问题

    </customBinding>

使用Silverlight的WCF模板问题

  </bindings>

使用Silverlight的WCF模板问题

  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

使用Silverlight的WCF模板问题

  <services>

使用Silverlight的WCF模板问题

   <service behaviorConfiguration="wcf.WCFBehavior" name="wcf.WCF">

使用Silverlight的WCF模板问题

    <endpoint address="" binding="customBinding" bindingConfiguration="customBinding0"

使用Silverlight的WCF模板问题

     contract="wcf.WCF" />

使用Silverlight的WCF模板问题

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

使用Silverlight的WCF模板问题

   </service>

使用Silverlight的WCF模板问题

  </services>

使用Silverlight的WCF模板问题

 </system.serviceModel>

不知道是不是英文版的缘故,<customBinding>应该默认是<basicHttpBinding>,在一些国外的论坛上发现了同样的问题,

而且,关键问题是在客户端的ServiceReferences.ClientConfig文件中,只有</configuration>.这样容易出现“关键字不在数据字典中的问题”,这个问题很明显

OK,那现在来改动一下,因为Silverlight只支持<basicHttpBinding>绑定,所以修改部分代码。

首先,web.config文件修改成:

使用Silverlight的WCF模板问题

<system.serviceModel>

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

    <basicHttpBinding>

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

    </basicHttpBinding>

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="customBinding0"

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

</configuration>

使用Silverlight的WCF模板问题

其实只是两个地方要改动,绑定形式

<bindings>

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

,和下面的引用部分。

 <endpoint address="" binding="basicHttpBinding" bindingConfiguration="customBinding0">

ServiceReferences.ClientConfig 中添加如下:

使用Silverlight的WCF模板问题

<?xml version="1.0" encoding="utf-8" ?>

使用Silverlight的WCF模板问题

<configuration>

使用Silverlight的WCF模板问题

  <system.serviceModel>

使用Silverlight的WCF模板问题

    <bindings>

使用Silverlight的WCF模板问题

     <basicHttpBinding>

使用Silverlight的WCF模板问题

        <binding name="BasicHttpBinding_WCF" maxBufferSize="2147483647"

使用Silverlight的WCF模板问题

          maxReceivedMessageSize="2147483647">

使用Silverlight的WCF模板问题

          <security mode="None" />

使用Silverlight的WCF模板问题

        </binding>

使用Silverlight的WCF模板问题

      </basicHttpBinding>

使用Silverlight的WCF模板问题

    </bindings>

使用Silverlight的WCF模板问题

    <client>

使用Silverlight的WCF模板问题

      <endpoint address="http://localhost:2254/WCF.svc" binding="basicHttpBinding"

使用Silverlight的WCF模板问题

        bindingConfiguration="BasicHttpBinding_WCF" contract="MyData.WCF"

使用Silverlight的WCF模板问题

        name="BasicHttpBinding_WCF" />

使用Silverlight的WCF模板问题

    </client>

使用Silverlight的WCF模板问题

  </system.serviceModel>

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

保存就可以测试运行了 ,我们在服务接口中写一个User类来测试

 1

使用Silverlight的WCF模板问题

using System;

 2

使用Silverlight的WCF模板问题

using System.Linq;

 3

使用Silverlight的WCF模板问题

using System.Runtime.Serialization;

 4

使用Silverlight的WCF模板问题

using System.ServiceModel;

 5

使用Silverlight的WCF模板问题

using System.ServiceModel.Activation;

 6

使用Silverlight的WCF模板问题

using System.Collections.Generic;

 7

使用Silverlight的WCF模板问题

using System.Text;

 8

使用Silverlight的WCF模板问题

 9

使用Silverlight的WCF模板问题

namespace wcf

10

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

{

11

使用Silverlight的WCF模板问题

    [ServiceContract(Namespace = "")]

12

使用Silverlight的WCF模板问题

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

13

使用Silverlight的WCF模板问题

    public class WCF

14

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

15

使用Silverlight的WCF模板问题

        [OperationContract]

16

使用Silverlight的WCF模板问题

        public int CountUsers()

17

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

18

使用Silverlight的WCF模板问题

            return 2;

19

使用Silverlight的WCF模板问题

        }

20

使用Silverlight的WCF模板问题

21

使用Silverlight的WCF模板问题

        public IEnumerable<User> GetUser()

22

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

23

使用Silverlight的WCF模板问题

            List<User> list = new List<User>();

24

使用Silverlight的WCF模板问题

25

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

               list.Add( new User() 

使用Silverlight的WCF模板问题

{ IsMember = false, Name = "qewerl", Age = 34});

26

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

               list.Add(new User() 

使用Silverlight的WCF模板问题

{ IsMember = true, Name = "asdful", Age = 23 });

27

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

{ IsMember = true, Name = "Paul", Age = 254 });

28

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

              list.Add( new User() 

使用Silverlight的WCF模板问题

{ IsMember = false, Name = "John", Age = 64 });

29

使用Silverlight的WCF模板问题

              return list.AsEnumerable<User>();

30

使用Silverlight的WCF模板问题

31

使用Silverlight的WCF模板问题

32

使用Silverlight的WCF模板问题

    }

33

使用Silverlight的WCF模板问题

34

使用Silverlight的WCF模板问题

    [DataContract]

35

使用Silverlight的WCF模板问题

    public class User

36

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

37

使用Silverlight的WCF模板问题

        [DataMember]

38

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

        public bool IsMember 

使用Silverlight的WCF模板问题

{ get; set; }

39

使用Silverlight的WCF模板问题

40

使用Silverlight的WCF模板问题

41

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

        public string Name 

使用Silverlight的WCF模板问题

42

使用Silverlight的WCF模板问题

43

使用Silverlight的WCF模板问题

44

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

        public int Age 

使用Silverlight的WCF模板问题

45

使用Silverlight的WCF模板问题

46

使用Silverlight的WCF模板问题

47

使用Silverlight的WCF模板问题

接下来看客户端MainPage.xaml.cs。

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

using System.Net;

使用Silverlight的WCF模板问题

using System.Windows;

使用Silverlight的WCF模板问题

using System.Windows.Controls;

使用Silverlight的WCF模板问题

using System.Windows.Documents;

使用Silverlight的WCF模板问题

using System.Windows.Input;

使用Silverlight的WCF模板问题

using System.Windows.Media;

使用Silverlight的WCF模板问题

using System.Windows.Media.Animation;

使用Silverlight的WCF模板问题

using System.Windows.Shapes;

使用Silverlight的WCF模板问题

using System.Collections.ObjectModel;

使用Silverlight的WCF模板问题

using SilverlightApplication1.MyData;

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

namespace SilverlightApplication1

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

    public partial class MainPage : UserControl

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

        public MainPage()

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

            InitializeComponent();

使用Silverlight的WCF模板问题

            WCFClient c = new WCFClient();

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

            c.GetUserAsync();

使用Silverlight的WCF模板问题

            c.GetUserCompleted += (s, e) =>

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

                ObservableCollection<User> p= e.Result;

使用Silverlight的WCF模板问题

                p.ToList<User>();

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

            };

使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题
使用Silverlight的WCF模板问题

}

使用Silverlight的WCF模板问题

 其中的ObservableCollection<User> 就可以绑定到DependencyObject的DataSource了;

上面有省略WCF服务的引用过程,至于绑定部分,网上有很多例子,就不再赘述了。

继续阅读